# PAGE-MAP: RJ Laravel Admin integration checklist (phase 3 waves)

**Client:** brand-006-rj-laravel-admin · **Phase 3 waves:** 2026-10-18 · **Status:** every live page mapped to archetype + layout → hero → components → API ops → permission → phone. Machine copy: [`page-map.seed.json`](page-map.seed.json) (this file is generated from it by `phase-3/waves/build_page_map.py`; asserted by `phase-3/waves/check_page_map.py`).

**Sources:** archetypes `phase-2/archetypes/ARCHETYPES.md` (decision B approved for non-flagship pages; A05 renamed Dashboard / report; A07 folded into A05) · flagships `phase-2/FEEDBACK-B-r1.md` · components `phase-0/COMPONENT-INVENTORY.md` · phone rule `phase-0/STACK-AND-PACKAGES.md` §2 · actions `projects/laravel-admin/handoffs/2026-10-12-T001-coverage.json` · op names + `x-permission` from `newadmin-api-kit/spec/laravel-admin-openapi.yaml` (Atlas `32813eb`, 1045 operations; identical op set to atlas `origin/main` on 2026-10-18) · route permissions from `deliverables/admin-design-system/programme/page-map.json`. Proposals: [`PROPOSALS.md`](PROPOSALS.md) / `PROPOSALS.json`.

## Summary

- **Live pages: 325** (+2 retired, not designed: `/admin/v1/orders`, `/admin/v1/gantt`). Every live row is complete (checker).
- **Per wave:** wave 1 (orders, designs, tickets) **74** · wave 2 (users, access, products, pricing, billing) **68** · wave 3 (materials, fabrics, factory, shipping, vision-checks) **102** · wave 4 (content, ops, micro-apps, wechat, ai, settings, dashboard, print-studio) **81**
- **Per archetype:** A01 Index table **103** · A02 Record detail **18** · A03 Create / edit form **137** · A04 Wizard / import / bulk operation **13** · A05 Dashboard / report **13** · A06 Live job / run monitor **7** · A08 Media / photo review **2** · A09 Settings / configuration **17** · A10 Preview / document / layout designer **7** · A11 Inbox / thread **1** · A12 Matrix / grid editor **7** (A07 0: `/admin/gantt` folded into A05 as its timeline variant).
- **Flagship rows: 34** (designs 25 · orders 2 · pricing 4 · tickets 3). They point to `phase-3/flagships/<area>/` instead of the archetype hero. Scope: orders = index + detail; tickets = index, new, thread; pricing = the pricing module; designs = **every designs-module page** (Frank: "everything with the designs we have to get perfect"); round 1 drew `/admin/designs*` (index, create, edit, Bulk Hub), the rest are queued for designs round 2. Gantt has its own round (`phase-3/flagships/gantt/`) but is not one of the five.
- **Actions → operations:** 1077 of 1083 actions mapped to a catalogue operation (100 via the T001 suggested route now in the spec, 16 via the route path now documented, 6 resolved by hand); 3 client-only by decision (onboarding draft, Q24); 2 need a decision (posts / watermark, PR-079); **0 action(s) without any operation**. Distinct ops used: **787**.
- **Needs-backend:** 70 page-level entries on 29 pages, all from proposals (`PR-…`) that touch a specific page; shell-wide proposals are listed once in PROPOSALS.
- **Partial actions:** rows with `partial_actions` were PARTIAL on 2026-10-12. They map to the op (T001 wave 1 closed 147 partials); verify the fields on staging before building that action.
- **Phone:** dedicated **15** · desktop-only-notice **154** · read-mostly **156**.

## How to read a row

- **arch·layout**: archetype and its locked layout (A01·a full-width table, A02·a tabs, A03·a section nav left, A06·a table of runs, A11·a 3-pane). `★` = flagship.
- **hero**: the screen to copy. Non-flagship rows copy the archetype hero board (`phase-2/archetypes/shots/<board>.png`); flagship rows copy `phase-3/flagships/<area>/`.
- **overrides**: what this page adds or changes on top of the archetype (kept from phase 0). **components**: exact kit names (COMPONENT-INVENTORY ids/slugs; `M01`–`M17` = the missing components in §4: M01 job tray + bell · M02 matrix editor · M03 gantt · M04 document link + cloud print · M05 diff viewer · M06 resizable split · M07 bilingual pair · M08 date-time · M09 locale/timezone · M10 photo lightbox · M11 code/JSON viewer · M12 cron builder · M13 QR display · M14 sortable list · M15 tree view · M16 rich text · M17 measurement grid).
- **Shell on every page (not repeated per row):** page-frame · sidebar · top-bar · menu-item · breadcrumbs · command-palette · M01 · M08 · M09 · environment-badge, from `admin.me.show` + `admin.me.menu`.
- **API ops**: exact catalogue `operationId`s the page calls. **perm**: route permission middleware, else the ops' `x-permission`. Note: the spec lists extra requirements on the orders/tickets lists that the live API does not enforce (PR-082).
- **phone**: `dedicated` = real `/m/…` view built phone-first · `read-mostly` = simple read-only `/m/…` view · `desktop-only-notice` = `/m/not-on-phone?to=…` fallback.

## Wave 1 · orders · designs · tickets (74 pages)

### orders (17)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/gantt` | G1 Ledger | phase-3/flagships/gantt/ G1 (Ledger, chosen by Frank 2026-10-18; boards G1a-G1f + G1p phone) | — · A07 folded into A05 as its timeline variant (decision B); gantt round in phase-3/flagships/gantt/ | kpi-tile, data-table, chart-frame, M08, M03, date, sheet, filter-bar | `admin.orders.gantt`, `admin.orders.gantt-detail`, `admin.orders.phase-summary`, `admin.shipping.tracking` | PR-013, PR-057, PR-058, PR-059, PR-060 | gantt chart\|admin | read-mostly `/m/gantt` |
| `/admin/matrix/factories` | A12 | A12 hero /admin/pricing/create · phase-2/archetypes/shots/A12.png | — | M02, combobox, toast, error-states, density | `admin.factory-matrix.show`, `admin.factory-matrix.update` | — | view factories\|admin | read-mostly `/m/matrix/factories` |
| `/admin/order-components` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.orders.components.index`, `admin.orders.components.show` | — | view orders\|admin | dedicated `/m/order-components` |
| `/admin/orders` | A01·a ★ | phase-3/flagships/orders/ (ORDERS-R1; truth phase-2/truth/TRUTH-ORDERS.md) | status tabs incl. paid-shipping containers-as-rows; 14 ajax popups (assembly, QC, measurement, cloud print/order, raise-ticket); export modal + bulk print/complete | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, money-input, M04, confirm, M01, switch, combobox, thumb, date, bulk-bar, action-bar, file-uploader | `admin.orders.index`, `admin.shipping.containers.cloudPrint`, `admin.shipping.containers.markPrinted`, `admin.shipping.containers.print`, `admin.orders.export`, `admin.orders.export.download`, `admin.orders.void`, `admin.orders.remove-hold`, `admin.orders.build`, `admin.orders.assembly`, `admin.orders.print`, `admin.orders.bulk-print`, `admin.orders.cloud-print`, `admin.orders.cloud-order-preview`, `admin.orders.cloud-order`, `admin.orders.phase-summary`, `admin.orders.quality-check`, `admin.orders.measurement-check`, `admin.orders.completed`, `admin.orders.qc-photos`, `admin.tickets.metadata`, `admin.tickets.categories.show`, `admin.tickets.templates.show`, `admin.orders.combinations`, `admin.tickets.attachments.store`, `admin.tickets.attachments.delete`, `admin.tickets.store`, `admin.shipping.tracking` | PR-001, PR-007, PR-013, PR-027, PR-082 | view orders\|admin | dedicated `/m/orders` |
| `/admin/orders/bulk-print` | A10 | A10 hero /admin/email-templates/{templateKey}/edit · phase-2/archetypes/shots/A10.png | server-rendered document (Q26) - design the shell/launcher only | field, segmented, badge, timeline, M05, save-bar, unsaved-guard, M04, switch | `admin.orders.bulk-print`, `admin.orders.buying-sheets` | — | print orders\|admin | read-mostly `/m/orders/bulk-print` |
| `/admin/orders/due` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | grouped by factory x day; staff-needed roll-up strip | kpi-tile, data-table, chart-frame, M08 | `admin.orders.due` | PR-061 | due chart\|admin | read-mostly `/m/orders/due` |
| `/admin/orders/fabric-jobs` | A06·a | A06 hero /admin/orders/print-jobs · phase-2/archetypes/shots/A06a.png | supplier-select filter | data-table, tabs, status-chip, progress, alert, M01, M04, M08, table-states | `admin.orders.fabric-jobs.index`, `admin.suppliers.index` | — | view orders\|admin | dedicated `/m/orders/fabric-jobs` |
| `/admin/orders/measurement/edit/{order}` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M17 | `admin.orders.measurement-check`, `admin.orders.measurements.update` | — | view pt_colors\|admin AND manage shipping\|admin AND view designs\|admin AND view orders\|admin | desktop-only-notice `/m/not-on-phone?to=/orders/measurement/edit/{order}` |
| `/admin/orders/print-jobs` | A06·a | self: A06 hero · phase-2/archetypes/shots/A06a.png | — | data-table, tabs, status-chip, progress, alert, M01, M04, M08, table-states, M11, date | `admin.orders.print-jobs.index`, `admin.orders.print-jobs.pdf-url`, `admin.orders.print-jobs.reprint`, `admin.orders.print-jobs.kanban-reprint` | PR-033 | view orders\|admin | dedicated `/m/orders/print-jobs` |
| `/admin/orders/print/{order}` | A10 | A10 hero /admin/email-templates/{templateKey}/edit · phase-2/archetypes/shots/A10.png | server PDF/mPDF document (Q26) - design the shell/launcher only | field, segmented, badge, timeline, M05, save-bar, unsaved-guard, M04 | `admin.orders.print`, `admin.orders.buying-sheet` | — | print orders\|admin | read-mostly `/m/orders/print/{order}` |
| `/admin/orders/{order}` | A02·a ★ | phase-3/flagships/orders/ (ORDERS-R1; truth phase-2/truth/TRUTH-ORDERS.md) | 11 modals; raise-issue ticket composer embedded; money action: settlement needs Idempotency-Key; FitQ preview/apply/undo | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, money-input, M04, M01, combobox, thumb, file-uploader, M17 | `admin.orders.show`, `admin.orders.pricing`, `admin.orders.ancestry`, `admin.orders.measurement-check`, `admin.orders.fitting-validation-logs.index`, `admin.orders.designs.index`, `admin.orders.components.index`, `admin.orders.buying-sheet`, `admin.orders.special-handling`, `admin.orders.notes.index`, `admin.orders.notes.store`, `admin.orders.photos.index`, `admin.orders.print`, `admin.orders.build`, `admin.orders.resync-cloud-build`, `admin.orders.assembly`, `admin.orders.payment-settlement`, `admin.orders.fitq.preview`, `admin.orders.fitq.apply`, `admin.orders.fitq.undo`, `admin.orders.qc-photos`, `admin.orders.cloud-print`, `admin.orders.cloud-order-preview`, `admin.orders.cloud-order`, `admin.tickets.templates.show`, `admin.tickets.ai.voice-transcribe`, `admin.tickets.attachments.store`, `admin.tickets.attachments.delete`, `admin.tickets.attachments.download`, `admin.tickets.store`, `admin.tickets.metadata`, `admin.tickets.categories.show`, `admin.orders.index`, `admin.orders.combinations`, `admin.accounts.index` | PR-003, PR-008, PR-011, PR-014, PR-042, PR-043 | view orders\|admin | dedicated `/m/orders/{order}` |
| `/admin/orders/{order}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | re-price on save; destructive-change confirm | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, money-input, M04, thumb, M01, M17 | `admin.orders.show`, `admin.orders.update`, `admin.orders.fabrics.check`, `admin.orders.payment-settlement`, `admin.orders.photos.index` | — | edit orders\|admin | desktop-only-notice `/m/not-on-phone?to=/orders/{order}/edit` |
| `/admin/orders/{order}/payload-replay/{audit?}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | — | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M11 | `admin.orders.payload-audits.index` | — | admin | read-mostly `/m/orders/{order}/payload-replay/{audit?}` |
| `/admin/replays` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, date | `admin.replays.index`, `admin.replays.sync` | — | view pt_colors\|admin AND view replays\|admin | dedicated `/m/replays` |
| `/admin/replays/{id}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | — | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M11, M05 | `admin.replays.show`, `admin.replays.replay` | — | view replays\|admin | read-mostly `/m/replays/{id}` |
| `/admin/replays/{id}/doctor` | A06·a | A06 hero /admin/orders/print-jobs · phase-2/archetypes/shots/A06a.png | human-value prompt (date/text) before placing order; creates a REAL order -> confirm step | data-table, tabs, status-chip, progress, alert, M01, M04, M08, table-states, M05 | `getReplayDoctorVerdict`, `applyReplayDoctorRepair` | — | view replays\|admin | dedicated `/m/replays/{id}/doctor` |
| `/admin/replays/{id}/repair` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | raw envelope text/JSON editor with suggest-diff; saves a new version, never overwrites | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M11, M05 | `admin.replays.show`, `admin.replays.suggest-repair`, `admin.replays.repair` | — | view replays\|admin | desktop-only-notice `/m/not-on-phone?to=/replays/{id}/repair` |

### designs (25)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/combinations` | A01·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | inline money edit (EUR/USD express cost); drag reorder | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, money-input, combobox | `admin.main-products.combinations.index`, `admin.main-products.combinations.express-cost`, `admin.main-products.combinations.declaration-profile`, `admin.main-products.combinations.reorder` | — | view combinations\|admin | read-mostly `/m/combinations` |
| `/admin/combinations/create` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.main-products.show`, `admin.main-products.combinations.store` | — | create combinations\|admin | desktop-only-notice `/m/not-on-phone?to=/combinations/create` |
| `/admin/combinations/edit/{main_product}` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.main-products.combinations.index`, `admin.main-products.combinations.update` | — | edit combinations\|admin | desktop-only-notice `/m/not-on-phone?to=/combinations/edit/{main_product}` |
| `/admin/component-default-rules` | A01·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, switch | `admin.component-default-rules.index`, `admin.component-default-rules.restore`, `admin.component-default-rules.toggle`, `admin.component-default-rules.destroy` | — | view component_default_rules\|admin | read-mostly `/m/component-default-rules` |
| `/admin/component-default-rules/create` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.fabric-codes.index`, `admin.component-default-rules.store` | — | create component_default_rules\|admin | desktop-only-notice `/m/not-on-phone?to=/component-default-rules/create` |
| `/admin/component-default-rules/{componentDefaultRule}/edit` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.component-default-rules.show`, `admin.fabric-codes.index`, `admin.component-default-rules.update` | — | edit component_default_rules\|admin | desktop-only-notice `/m/not-on-phone?to=/component-default-rules/{componentDefaultRule}/edit` |
| `/admin/design-blockers` | A01·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, confirm, switch, M01 | `admin.design-blockers.index`, `admin.design-blockers.export`, `admin.design-blockers.toggle`, `admin.design-blockers.destroy` | — | admin | read-mostly `/m/design-blockers` |
| `/admin/design-blockers/create` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M15 | `admin.products.designs`, `admin.design-blockers.preset-impact`, `admin.design-blockers.store` | — | admin | desktop-only-notice `/m/not-on-phone?to=/design-blockers/create` |
| `/admin/design-blockers/upload` | A04 ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, M11, file-uploader | `admin.design-blockers.upload`, `admin.design-blockers.confirm-upload`, `admin.design-blockers.cancel-upload` | — | admin | desktop-only-notice `/m/not-on-phone?to=/design-blockers/upload` |
| `/admin/design-blockers/{design_blocker}/edit` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M15 | `admin.design-blockers.show`, `admin.products.designs`, `admin.design-blockers.preset-impact`, `admin.design-blockers.update` | — | admin | desktop-only-notice `/m/not-on-phone?to=/design-blockers/{design_blocker}/edit` |
| `/admin/design-components` | A01·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.design-components.index`, `admin.design-components.restore`, `admin.design-components.destroy`, `admin.design-components.reorder` | — | view components\|admin | read-mostly `/m/design-components` |
| `/admin/design-components/create` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07, M04 | `admin.pt-components.index`, `admin.design-components.store` | — | create components\|admin | desktop-only-notice `/m/not-on-phone?to=/design-components/create` |
| `/admin/design-components/{design_component}/edit` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.design-components.show`, `admin.pt-components.index`, `admin.design-components.update` | — | edit components\|admin | desktop-only-notice `/m/not-on-phone?to=/design-components/{design_component}/edit` |
| `/admin/designs` | A01·a ★ | phase-3/flagships/designs/ (DESIGNS-R1, awaiting Frank; truth phase-2/truth/TRUTH-DESIGNS.md) | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.designs.index`, `admin.designs.sort`, `admin.designs.destroy` | PR-003 | view designs\|admin | read-mostly `/m/designs` |
| `/admin/designs/bulk-hub` | A04 ★ | phase-3/flagships/designs/ (DESIGNS-R1, awaiting Frank; truth phase-2/truth/TRUTH-DESIGNS.md) | 3 modes: find/replace, JSON import, CSV mappings -> preview diff -> apply | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, M11, file-uploader, switch, bulk-bar, action-bar | `admin.designs.bulk-hub.index`, `admin.designs.bulk-hub.export`, `admin.designs.bulk-hub.preview`, `admin.designs.bulk-hub.apply`, `admin.designs.bulk-hub.cancel`, `admin.designs.popups.mappings.template` | PR-003, PR-018 | view designs\|admin | desktop-only-notice `/m/not-on-phone?to=/designs/bulk-hub` |
| `/admin/designs/create` | A03·a ★ | phase-3/flagships/designs/ (DESIGNS-R1, awaiting Frank; truth phase-2/truth/TRUTH-DESIGNS.md) | type template rendered on type/parent change; swatch picker + file manager upload | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M11, confirm, gallery-picker, thumb, file-uploader | `admin.design-types.index`, `admin.designs.list`, `admin.pt-colors.index`, `admin.designs.type-template`, `admin.media-library.list`, `admin.designs.store` | PR-003, PR-062, PR-063 | create designs\|admin | desktop-only-notice `/m/not-on-phone?to=/designs/create` |
| `/admin/designs/{design}/edit` | A03·a ★ | phase-3/flagships/designs/ (DESIGNS-R1, awaiting Frank; truth phase-2/truth/TRUTH-DESIGNS.md) | popup-entry grid with chunked save + bulk-set supplier/surcharge; swatch picker; R9 fork-on-change / apply_to_history | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M14, M15, money-input, M04, confirm, gallery-picker, thumb, bulk-bar, action-bar, file-uploader | `admin.designs.show`, `admin.special-handling-codes.index`, `admin.camera-frames.index`, `admin.products.designs`, `admin.pt-colors.index`, `admin.designs.update`, `admin.designs.popups.chunk`, `admin.designs.meta.update`, `admin.designs.popups.destroy`, `admin.designs.popups.order-refs`, `admin.designs.fields.sort`, `admin.designs.fields.bulk-supplier`, `admin.designs.fields.bulk-surcharge`, `admin.media-library.list` | PR-003, PR-008, PR-064, PR-066 | edit designs\|admin | desktop-only-notice `/m/not-on-phone?to=/designs/{design}/edit` |
| `/admin/pt-colors` | A12 ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | row lifecycle actions (online/offline/retire/restore) on the colour axis; cell editor opens in a popover/drawer | M02, combobox, toast, error-states, density, M04, confirm, switch, M01 | `admin.pt-colors.index`, `admin.pt-colors.export`, `admin.pt-colors.restore`, `admin.pt-colors.online`, `admin.pt-colors.offline`, `admin.pt-colors.destroy`, `admin.pt-colors.bindings.store`, `admin.pt-colors.bindings.update`, `admin.pt-colors.bindings.destroy` | — | view pt_colors\|admin | read-mostly `/m/pt-colors` |
| `/admin/pt-colors/create` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.pt-colors.store` | — | create pt_colors\|admin | desktop-only-notice `/m/not-on-phone?to=/pt-colors/create` |
| `/admin/pt-colors/import` | A04 ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, file-uploader | `admin.pt-colors.export`, `admin.pt-colors.import.preview`, `admin.pt-colors.import.confirm`, `admin.pt-colors.import.cancel` | PR-021 | view pt_colors\|admin | desktop-only-notice `/m/not-on-phone?to=/pt-colors/import` |
| `/admin/pt-colors/reports/codeless` | A05 ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | kpi-tile, data-table, chart-frame, M08 | `admin.pt-colors.reports.codeless` | — | view pt_colors\|admin | read-mostly `/m/pt-colors/reports/codeless` |
| `/admin/pt-colors/{ptColor}/edit` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04, gallery-picker, thumb, file-uploader | `admin.pt-colors.show`, `admin.pt-colors.update`, `admin.media-library.list` | — | edit pt_colors\|admin | desktop-only-notice `/m/not-on-phone?to=/pt-colors/{ptColor}/edit` |
| `/admin/pt-components` | A01·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.pt-components.index`, `admin.pt-components.restore`, `admin.pt-components.reorder` | — | view pt_components\|admin | read-mostly `/m/pt-components` |
| `/admin/pt-components/create` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.material-types.index`, `admin.pt-components.store` | — | create pt_components\|admin | desktop-only-notice `/m/not-on-phone?to=/pt-components/create` |
| `/admin/pt-components/{ptComponent}/edit` | A03·a ★ | phase-3/flagships/designs/ (queued for designs round 2; DESIGNS-R1 shell + kit apply; truth phase-2/truth/TRUTH-DESIGNS.md) | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.pt-components.accepted-vendor-codes.index`, `admin.pt-components.update`, `admin.pt-components.accepted-vendor-codes.update`, `admin.pt-components.preference-order.update` | — | edit pt_components\|admin | desktop-only-notice `/m/not-on-phone?to=/pt-components/{ptComponent}/edit` |

### tickets (32)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/faq-clusters` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.faq-clusters.index`, `admin.faq-clusters.reorder`, `admin.faq-clusters.destroy` | — | view articles\|admin | read-mostly `/m/faq-clusters` |
| `/admin/faq-clusters/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.faq-clusters.store` | — | view articles\|admin + create articles\|admin | desktop-only-notice `/m/not-on-phone?to=/faq-clusters/create` |
| `/admin/faq-clusters/{id}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.faq-clusters.show`, `admin.faq-clusters.update` | — | view articles\|admin + edit articles\|admin | desktop-only-notice `/m/not-on-phone?to=/faq-clusters/{id}/edit` |
| `/admin/feedback` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, date, M01 | `admin.feedback.index`, `admin.feedback.export`, `admin.feedback.status.update` | — | view feedback\|admin | read-mostly `/m/feedback` |
| `/admin/feedback/categories` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.feedback.categories.index`, `admin.feedback.categories.destroy`, `admin.feedback.categories.subcategories.destroy` | — | view feedback categories\|admin | read-mostly `/m/feedback/categories` |
| `/admin/feedback/categories/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.feedback.categories.store` | — | view feedback categories\|admin | desktop-only-notice `/m/not-on-phone?to=/feedback/categories/create` |
| `/admin/feedback/categories/{category}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.feedback.categories.index`, `admin.feedback.categories.update` | — | view feedback categories\|admin | desktop-only-notice `/m/not-on-phone?to=/feedback/categories/{category}/edit` |
| `/admin/feedback/categories/{category}/subcategories/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.feedback.categories.subcategories.store` | — | view feedback categories\|admin | desktop-only-notice `/m/not-on-phone?to=/feedback/categories/{category}/subcategories/create` |
| `/admin/feedback/categories/{category}/subcategories/{subcategory}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.feedback.categories.index`, `admin.feedback.categories.subcategories.update` | — | view feedback categories\|admin | desktop-only-notice `/m/not-on-phone?to=/feedback/categories/{category}/subcategories/{subcategory}/edit` |
| `/admin/feedback/{feedback}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | — | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M11 | `admin.feedback.show` | — | view pt_colors\|admin AND view feedback\|admin | read-mostly `/m/feedback/{feedback}` |
| `/admin/tickets` | A01·a ★ | phase-3/flagships/tickets/ (TICKETS-R1, awaiting Frank; truth phase-2/truth/TRUTH-TICKETS.md) | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, combobox | `admin.tickets.index`, `admin.tickets.metadata`, `admin.accounts.index` | PR-001, PR-009, PR-011, PR-035, PR-039, PR-040, PR-042, PR-082 | view pt_colors\|admin AND manage shipping\|admin AND view designs\|admin AND view tickets\|admin | dedicated `/m/tickets` |
| `/admin/tickets/categories` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.tickets.categories.index`, `admin.tickets.categories.delete` | PR-039 | view tickets categories\|admin | read-mostly `/m/tickets/categories` |
| `/admin/tickets/categories/new` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.tickets.types`, `admin.tickets.categories.store` | — | view tickets\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/categories/new` |
| `/admin/tickets/categories/{category}` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | parent-category header strip | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.tickets.categories.show`, `admin.tickets.subcategories.delete` | — | view tickets categories\|admin | read-mostly `/m/tickets/categories/{category}` |
| `/admin/tickets/categories/{category}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.tickets.categories.show`, `admin.tickets.types`, `admin.tickets.categories.update` | — | view tickets categories\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/categories/{category}/edit` |
| `/admin/tickets/categories/{category}/subcategories/new` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.tickets.categories.show`, `admin.tickets.subcategories.store` | — | view tickets categories\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/categories/{category}/subcategories/new` |
| `/admin/tickets/categories/{category}/subcategories/{subcategory}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.tickets.categories.show`, `admin.tickets.subcategories.update` | — | view tickets categories\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/categories/{category}/subcategories/{subcategory}/edit` |
| `/admin/tickets/new` | A03·a ★ | phase-3/flagships/tickets/ (TICKETS-R1, awaiting Frank; truth phase-2/truth/TRUTH-TICKETS.md) | 8 ajax cascades (type->category->sub, template, owner/order typeahead); voice recorder + attachment chips | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M11, M04, confirm, file-uploader | `admin.tickets.types`, `admin.tickets.metadata`, `admin.tickets.categories.show`, `admin.tickets.templates.show`, `admin.accounts.index`, `admin.orders.index`, `admin.tickets.attachments.store`, `admin.tickets.attachments.delete`, `admin.tickets.attachments.download`, `admin.tickets.ai.voice-transcribe`, `admin.tickets.store` | — | view tickets\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/new` |
| `/admin/tickets/settings` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | — | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm | `admin.tickets.settings.index`, `admin.tickets.settings.update`, `admin.tickets.run-autoclose` | — | view tickets settings\|admin | read-mostly `/m/tickets/settings` |
| `/admin/tickets/severity` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.tickets.severities.index`, `admin.tickets.severities.delete` | PR-039 | view tickets severities\|admin | read-mostly `/m/tickets/severity` |
| `/admin/tickets/severity/new` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.tickets.severities.store` | — | manage tickets severities\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/severity/new` |
| `/admin/tickets/severity/{severity}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.tickets.severities.index`, `admin.tickets.severities.update` | — | view tickets severities\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/severity/{severity}/edit` |
| `/admin/tickets/status` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.tickets.statuses.index`, `admin.tickets.statuses.delete` | PR-039 | view pt_colors\|admin AND manage shipping\|admin AND view designs\|admin AND view tickets\|admin AND view tickets statuses\|admin | read-mostly `/m/tickets/status` |
| `/admin/tickets/status/new` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.tickets.statuses.store` | — | view pt_colors\|admin AND manage shipping\|admin AND view designs\|admin AND view tickets\|admin AND manage tickets statuses\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/status/new` |
| `/admin/tickets/status/{status}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.tickets.statuses.index`, `admin.tickets.statuses.update` | — | view pt_colors\|admin AND manage shipping\|admin AND view designs\|admin AND view tickets\|admin AND view tickets statuses\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/status/{status}/edit` |
| `/admin/tickets/templates` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.tickets.templates.index`, `admin.tickets.templates.delete` | — | view tickets templates\|admin | read-mostly `/m/tickets/templates` |
| `/admin/tickets/templates/new` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M16 | `admin.tickets.types`, `admin.tickets.citations.search`, `admin.tickets.templates.store` | — | view tickets\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/templates/new` |
| `/admin/tickets/templates/{template}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M16 | `admin.tickets.templates.show`, `admin.tickets.types`, `admin.tickets.citations.search`, `admin.tickets.templates.update` | — | view tickets\|admin | desktop-only-notice `/m/not-on-phone?to=/tickets/templates/{template}/edit` |
| `/admin/tickets/training-data` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.tickets.training-data.index` | — | view training data\|admin | read-mostly `/m/tickets/training-data` |
| `/admin/tickets/training-data/pending` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.tickets.training-data.pending` | — | view training data\|admin | read-mostly `/m/tickets/training-data/pending` |
| `/admin/tickets/training-data/{exportLog}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | — | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M11 | `admin.tickets.training-data.show` | — | view training data\|admin | read-mostly `/m/tickets/training-data/{exportLog}` |
| `/admin/tickets/{ticket}` | A11·a ★ | phase-3/flagships/tickets/ (TICKETS-R1, awaiting Frank; truth phase-2/truth/TRUTH-TICKETS.md) | AI suggestion (RAG) + journal citation picker in composer; wallet action box (money write) in side panel; voice recorder | list-row, thread, M16, M06, sheet, money-input, confirm, toast, filter-bar, M08, M11, combobox, file-uploader | `admin.tickets.show`, `admin.tickets.update`, `admin.tickets.comments.store`, `admin.tickets.ai.suggest`, `admin.tickets.ai.voice-transcribe`, `admin.tickets.citations.search`, `admin.tickets.templates.show`, `admin.tickets.categories.show`, `admin.tickets.attachments.store`, `admin.tickets.attachments.delete`, `admin.tickets.attachments.download`, `admin.tickets.billable-account`, `admin.wallet-action-templates.index`, `admin.tickets.wallet-transactions.store` | PR-009, PR-011, PR-026, PR-035, PR-036, PR-037, PR-039, PR-040 | view tickets\|admin | dedicated `/m/tickets/{ticket}` |

## Wave 2 · users · access · products · pricing · billing (68 pages)

### users (26)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/account-classification/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.account-classification.groups.index`, `admin.account-classification.rules.store` | — | view account classification | desktop-only-notice `/m/not-on-phone?to=/account-classification/create` |
| `/admin/account-classification/groups` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.account-classification.groups.index`, `admin.account-classification.groups.destroy` | — | view account classification | read-mostly `/m/account-classification/groups` |
| `/admin/account-classification/index` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, bulk-bar, action-bar | `admin.account-classification.rules.index`, `admin.account-classification.bulk-assign`, `admin.account-classification.rules.destroy` | — | view account classification | read-mostly `/m/account-classification/index` |
| `/admin/admin/account-classification/edit/{id}` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.account-classification.rules.show`, `admin.account-classification.rules.update` | — | view account classification | desktop-only-notice `/m/not-on-phone?to=/admin/account-classification/edit/{id}` |
| `/admin/crm/settings` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | — | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm | `admin.crm.index`, `admin.crm.update` | — | view crm\|admin | read-mostly `/m/crm/settings` |
| `/admin/industries` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M07 | `admin.industries.index` | — | view industries\|admin | read-mostly `/m/industries` |
| `/admin/industries/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07 | `admin.industries.store` | — | create industries\|admin | desktop-only-notice `/m/not-on-phone?to=/industries/create` |
| `/admin/industries/{industry}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.industries.show`, `admin.industries.update` | — | edit industries\|admin | desktop-only-notice `/m/not-on-phone?to=/industries/{industry}/edit` |
| `/admin/regions` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, switch | `admin.regions.index`, `admin.regions.active` | — | view regions\|admin | read-mostly `/m/regions` |
| `/admin/regions/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.regions.store` | — | create regions\|admin | desktop-only-notice `/m/not-on-phone?to=/regions/create` |
| `/admin/regions/{region}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.regions.show`, `admin.regions.update` | — | edit regions\|admin | desktop-only-notice `/m/not-on-phone?to=/regions/{region}/edit` |
| `/admin/retailer/{retailer}/connected-apps` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | one-time Studio team picker state; audit tail + last-error block | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, combobox | `admin.social-capsule-media-grants.show`, `admin.social-capsule-media-grants.studio-teams`, `admin.social-capsule-media-grants.toggle`, `admin.social-capsule-media-grants.link-team`, `admin.social-capsule-media-grants.sync-users` | — | users.role = admin (as the web page) + token scope micro-apps:write | read-mostly `/m/retailer/{retailer}/connected-apps` |
| `/admin/retailer/{retailer}/subscriptions` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.retailers.subscriptions.index`, `admin.retailers.subscriptions.activate`, `admin.retailers.subscriptions.deactivate` | — | view micro_apps\|admin | read-mostly `/m/retailer/{retailer}/subscriptions` |
| `/admin/sessions` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | typed-confirm REVOKE ALL | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.sessions.index`, `admin.accounts.sessions.destroy`, `admin.sessions.revoke-all` | — | admin | read-mostly `/m/sessions` |
| `/admin/staffs/create` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | — | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm | `admin.staffs.index`, `admin.staffs.update` | — | staffs\|admin | read-mostly `/m/staffs/create` |
| `/admin/user/{user}/sub-accounts` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.accounts.sub-accounts.index`, `admin.accounts.sub-accounts.destroy`, `admin.accounts.reset-2fa` | — | view retailer_user_accounts\|admin | read-mostly `/m/user/{user}/sub-accounts` |
| `/admin/user/{user}/sub-accounts/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M11 | `admin.accounts.show`, `admin.accounts.roles.index`, `admin.accounts.roles.permissions`, `admin.accounts.sub-accounts.store` | — | create retailer_user_accounts\|admin | desktop-only-notice `/m/not-on-phone?to=/user/{user}/sub-accounts/create` |
| `/admin/user/{user}/sub-accounts/{sub_account}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm | `admin.accounts.sub-accounts.show`, `admin.accounts.roles.index`, `admin.accounts.sessions.index`, `admin.accounts.roles.permissions`, `admin.accounts.sub-accounts.update` | — | edit retailer_user_accounts\|admin | desktop-only-notice `/m/not-on-phone?to=/user/{user}/sub-accounts/{sub_account}/edit` |
| `/admin/users` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, money-input, confirm, switch | `admin.accounts.index`, `admin.accounts.v-toggles`, `admin.accounts.offline`, `admin.accounts.reset-2fa` | PR-017, PR-018, PR-022 | view retailers\|admin | read-mostly `/m/users` |
| `/admin/users-configurations/{user}` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | cascading main product -> product -> design-tree checklist | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, M15, M11 | `admin.accounts.configurations.index`, `admin.main-products.products`, `admin.products.designs`, `admin.accounts.configurations.update` | — | configure accounts\|admin | read-mostly `/m/users-configurations/{user}` |
| `/admin/users/bulk-features` | A04 | A04 hero /admin/designs/bulk-hub · phase-2/archetypes/shots/A04.png | — | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, M04, bulk-bar, action-bar | `admin.accounts.index`, `admin.accounts.bulk-features` | — | edit retailers\|admin | desktop-only-notice `/m/not-on-phone?to=/users/bulk-features` |
| `/admin/users/bulk-permissions` | A04 | A04 hero /admin/designs/bulk-hub · phase-2/archetypes/shots/A04.png | — | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, bulk-bar, action-bar | `admin.accounts.index`, `admin.accounts.permission-catalogue`, `admin.accounts.bulk-permissions` | PR-017 | edit retailers\|admin | desktop-only-notice `/m/not-on-phone?to=/users/bulk-permissions` |
| `/admin/users/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M14, money-input | `admin.currencies.index`, `admin.regions.index`, `admin.accounts.permission-catalogue`, `admin.accounts.store` | — | create retailers\|admin | desktop-only-notice `/m/not-on-phone?to=/users/create` |
| `/admin/users/{user}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, money-input, confirm | `admin.accounts.show`, `admin.currencies.index`, `admin.regions.index`, `admin.accounts.permission-catalogue`, `admin.accounts.clerk-status`, `admin.social-capsule-media-grants.show`, `admin.accounts.sessions.index`, `admin.accounts.update`, `admin.accounts.force-logout`, `admin.accounts.clerk-sync` | — | edit retailers\|admin | desktop-only-notice `/m/not-on-phone?to=/users/{user}/edit` |
| `/admin/users/{user}/sessions` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.accounts.sessions.index`, `admin.accounts.sessions.destroy`, `admin.accounts.tokens.destroy`, `admin.accounts.force-logout` | — | admin | read-mostly `/m/users/{user}/sessions` |
| `/admin/users/{user}/sessions/api` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | same view as /admin/users/{user}/sessions - design once, alias | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.accounts.sessions.index`, `admin.accounts.sessions.destroy`, `admin.accounts.tokens.destroy`, `admin.accounts.force-logout` | — | admin | read-mostly `/m/users/{user}/sessions/api` |

### access (12)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/access` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | tabbed console: keys table, MCP door cards, presets, audit log | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, date, bulk-bar, action-bar | `admin.api-keys.index`, `admin.api-keys.destroy`, `admin.api-keys.bulk-revoke`, `admin.mcp-doors.index`, `admin.mcp-doors.update`, `admin.mcp-doors.allowlist.store`, `admin.mcp-doors.allowlist.destroy`, `admin.api-scope-presets.index`, `admin.api-request-logs.index`, `admin.api-request-logs.settings.update` | PR-017 | manage api keys\|admin | read-mostly `/m/access` |
| `/admin/access/keys/new` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.api-scope-presets.index`, `admin.api-keys.store` | — | manage api keys | desktop-only-notice `/m/not-on-phone?to=/access/keys/new` |
| `/admin/access/keys/{key}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | — | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet | `admin.api-keys.show`, `admin.api-request-logs.index`, `admin.api-keys.destroy`, `admin.api-keys.update`, `admin.api-keys.settings.update` | — | manage api keys | read-mostly `/m/access/keys/{key}` |
| `/admin/access/presets/{preset}` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | slug "new" create mode; locked/full-access read-only state for non-master | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm | `admin.api-scope-presets.show`, `admin.api-scope-presets.store`, `admin.api-scope-presets.update`, `admin.api-scope-presets.destroy` | — | manage api keys | desktop-only-notice `/m/not-on-phone?to=/access/presets/{preset}` |
| `/admin/factory-credentials` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.factory-credentials.index`, `admin.factory-credentials.rotate-passcode`, `admin.factory-credentials.toggle-active` | — | manage factory credentials\|admin | read-mostly `/m/factory-credentials` |
| `/admin/factory-credentials/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.factories.index`, `admin.factory-credentials.store` | — | view factories\|admin | desktop-only-notice `/m/not-on-phone?to=/factory-credentials/create` |
| `/admin/roles` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.roles.index`, `admin.roles.destroy` | — | view roles\|admin | read-mostly `/m/roles` |
| `/admin/roles/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | grouped permission checkbox grid | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.roles.permissions`, `admin.roles.store` | — | create roles\|admin | desktop-only-notice `/m/not-on-phone?to=/roles/create` |
| `/admin/roles/{role}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | grouped permission checkbox grid | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.roles.show`, `admin.roles.update` | — | edit roles\|admin | desktop-only-notice `/m/not-on-phone?to=/roles/{role}/edit` |
| `/admin/sub-admins` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, switch | `admin.admins.index`, `admin.admins.destroy`, `admin.admins.reset-2fa` | — | view admins\|admin | read-mostly `/m/sub-admins` |
| `/admin/sub-admins/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.roles.permissions`, `admin.roles.show`, `admin.admins.store` | — | create admins\|admin | desktop-only-notice `/m/not-on-phone?to=/sub-admins/create` |
| `/admin/sub-admins/{sub_admin}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm | `admin.admins.show`, `admin.admins.api-key-revocation-preview`, `admin.roles.show`, `admin.admins.update` | — | edit admins\|admin | desktop-only-notice `/m/not-on-phone?to=/sub-admins/{sub_admin}/edit` |

### products (20)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/categories` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.training-categories.index`, `admin.training-categories.destroy`, `admin.training-categories.reorder` | — | view trainings\|admin | read-mostly `/m/categories` |
| `/admin/categories/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07, thumb | `admin.training-categories.store` | — | token scope trainings:write | desktop-only-notice `/m/not-on-phone?to=/categories/create` |
| `/admin/categories/{category}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, thumb | `admin.training-categories.show`, `admin.training-categories.update` | — | view trainings\|admin | desktop-only-notice `/m/not-on-phone?to=/categories/{category}/edit` |
| `/admin/default-measurements` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.default-measurements.index`, `admin.default-measurements.destroy`, `admin.default-measurements.reorder` | — | view default_measurements\|admin | read-mostly `/m/default-measurements` |
| `/admin/default-measurements/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.settings.index`, `admin.default-measurements.store` | — | create default_measurements\|admin | desktop-only-notice `/m/not-on-phone?to=/default-measurements/create` |
| `/admin/default-measurements/{default_measurement}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.default-measurements.show`, `admin.default-measurements.update` | — | edit default_measurements\|admin | desktop-only-notice `/m/not-on-phone?to=/default-measurements/{default_measurement}/edit` |
| `/admin/formulas` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.formulas.index` | — | view formulas\|admin | read-mostly `/m/formulas` |
| `/admin/formulas/factory` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | client-side simulator controls | kpi-tile, data-table, chart-frame, M08 | `admin.formulas.factories` | — | view\|manage formulas\|admin | read-mostly `/m/formulas/factory` |
| `/admin/formulas/{formula}` | A12 | A12 hero /admin/pricing/create · phase-2/archetypes/shots/A12.png | tabs per combination / excess; formula expression cells with variables | M02, combobox, toast, error-states, density, M01 | `admin.formulas.show`, `admin.formulas.store` | — | view pt_colors\|admin AND view\|manage formulas\|admin | read-mostly `/m/formulas/{formula}` |
| `/admin/main-products` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, switch | `admin.main-products.index`, `admin.main-products.reorder`, `admin.main-products.destroy` | — | view main_products\|admin | read-mostly `/m/main-products` |
| `/admin/main-products/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07, gallery-picker, thumb, file-uploader | `admin.products.index`, `admin.media-library.list`, `admin.main-products.store` | — | create main_products\|admin | desktop-only-notice `/m/not-on-phone?to=/main-products/create` |
| `/admin/main-products/{main_product}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, gallery-picker, thumb, file-uploader | `admin.main-products.show`, `admin.media-library.list`, `admin.main-products.update` | — | edit main_products\|admin | desktop-only-notice `/m/not-on-phone?to=/main-products/{main_product}/edit` |
| `/admin/product-quality-checks` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, switch | `admin.product-quality-checks.index`, `admin.product-quality-checks.force-delete`, `admin.product-quality-checks.reorder`, `admin.product-quality-checks.check.off` | — | view product_quality_checks\|admin | read-mostly `/m/product-quality-checks` |
| `/admin/product-quality-checks/{product}` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | repeater rows with image + camera_frame per row; header_ids checkbox strip | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm, gallery-picker, thumb, file-uploader | `admin.product-quality-checks.manage`, `admin.media-library.list`, `admin.product-quality-checks.update` | — | manage product_quality_checks\|admin | desktop-only-notice `/m/not-on-phone?to=/product-quality-checks/{product}` |
| `/admin/products` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, M04, confirm, switch | `admin.products.index`, `admin.products.reorder`, `admin.products.destroy`, `admin.products.toggle-cloud-flag` | — | view products\|admin | read-mostly `/m/products` |
| `/admin/products/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07, M04 | `admin.products.store` | — | create products\|admin | desktop-only-notice `/m/not-on-phone?to=/products/create` |
| `/admin/products/{product}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.products.show`, `admin.products.update` | — | edit products\|admin | desktop-only-notice `/m/not-on-phone?to=/products/{product}/edit` |
| `/admin/subcategories` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.training-subcategories.index`, `admin.training-subcategories.destroy`, `admin.training-subcategories.reorder` | — | view trainings\|admin | read-mostly `/m/subcategories` |
| `/admin/subcategories/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M14, M07, thumb | `admin.training-categories.index`, `admin.training-subcategories.store` | — | view trainings\|admin | desktop-only-notice `/m/not-on-phone?to=/subcategories/create` |
| `/admin/subcategories/{subcategory}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, thumb | `admin.training-subcategories.show`, `admin.training-subcategories.update` | — | view trainings\|admin | desktop-only-notice `/m/not-on-phone?to=/subcategories/{subcategory}/edit` |

### pricing (4)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/pricing` | A12 ★ | phase-3/flagships/pricing/ (PRICING-R3: fabric = export/import only, decided by Frank 2026-10-18; truth phase-2/truth/TRUTH-PRICING.md) | two-prong entry (Frank 2026-10-18): retailer -> main product -> product selects (2 ajax) opening prong 1, the design pricing editor, or prong 2, the fabric export/import workspace (no on-screen fabric grid); queued export | combobox, toast, error-states, density, money-input, confirm, M01, price-group | `admin.accounts.index`, `admin.accounts.show`, `admin.main-products.products`, `admin.pricing.export`, `admin.pricing.export-download` | PR-003, PR-068 | view pricing\|admin | read-mostly `/m/pricing` |
| `/admin/pricing/create` | A12 ★ | phase-3/flagships/pricing/ (PRICING-R3: fabric = export/import only, decided by Frank 2026-10-18; truth phase-2/truth/TRUTH-PRICING.md) | type=combinations = fabric combination pricing as an EXPORT / IMPORT workspace only: no on-screen grid; the hypergrid (retailer-hypergrid.js) and its per-cell admin/pricing/retailer/update are retired in the new admin (Frank 2026-10-18); queued export -> Jobs tray -> bell notification with the download link (signed URL); recent export files per retailer; import: upload -> check/map -> diff-summary preview -> typed confirm -> run -> result | combobox, toast, error-states, density, money-input, confirm, M01, price-group, file-uploader, stepper, review-step, M05, M04 | `admin.pricing.designs.index`, `admin.pricing.designs.store`, `admin.pricing.retailer.index`, `admin.pricing.export`, `admin.pricing.exports.index`, `admin.pricing.exports.show`, `admin.pricing.export-download-url`, `admin.pricing.import` | PR-003, PR-068 | view pt_colors\|admin AND view pricing\|admin | read-mostly `/m/pricing/create` |
| `/admin/pricing/master` | A12 ★ | phase-3/flagships/pricing/ (PRICING-R1, awaiting Frank; truth phase-2/truth/TRUTH-PRICING.md) | handler RETIRED L1033/L1034 (aborts 403) - propose retire; do not design; propose retire, do not design · no-design: keep the row, spend no design effort (P0 default) | M02, combobox, toast, error-states, density, money-input, confirm, M01, price-group | `admin.pricing.master.index`, `admin.pricing.export.master` | — | export pricing\|admin | desktop-only-notice `/m/not-on-phone?to=/pricing/master` |
| `/admin/pricing/master/import/{retailer}` | A04 ★ | phase-3/flagships/pricing/ (PRICING-R1, awaiting Frank; truth phase-2/truth/TRUTH-PRICING.md) | — | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, money-input, file-uploader | `admin.accounts.show`, `admin.pricing.import` | — | import pricing\|admin | desktop-only-notice `/m/not-on-phone?to=/pricing/master/import/{retailer}` |

### billing (6)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/billing` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, money-input, confirm, combobox | `admin.accounts.index` | — | view accounts\|admin | read-mostly `/m/billing` |
| `/admin/billing/surcharges/{retailer}` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | scoped to one retailer (breadcrumb from /admin/billing) | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, money-input | `admin.billing.surcharges.show`, `admin.billing.surcharges.update` | — | surcharge\|admin | read-mostly `/m/billing/surcharges/{retailer}` |
| `/admin/billing/wallet-action-templates` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.wallet-action-templates.index`, `admin.wallet-action-templates.active` | — | wallet\|admin | read-mostly `/m/billing/wallet-action-templates` |
| `/admin/billing/wallet-action-templates/new` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.wallet-action-templates.store` | — | wallet\|admin | desktop-only-notice `/m/not-on-phone?to=/billing/wallet-action-templates/new` |
| `/admin/billing/wallet-action-templates/{walletActionTemplate}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.wallet-action-templates.index`, `admin.wallet-action-templates.update` | — | wallet\|admin | desktop-only-notice `/m/not-on-phone?to=/billing/wallet-action-templates/{walletActionTemplate}/edit` |
| `/admin/wallet/{user}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | money write: credit/debit with Idempotency-Key; voice-to-reason upload | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, money-input, combobox, file-uploader | `admin.billing.wallets.show`, `admin.wallet-action-templates.index`, `admin.billing.wallets.transactions.store`, `admin.tickets.ai.voice-transcribe` | — | wallet\|admin | read-mostly `/m/wallet/{user}` |

## Wave 3 · materials · fabrics · factory · shipping · vision-checks (102 pages)

### materials (30)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/accessory-codes` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | kanban print launch (Print Studio door + cloud print chunks) | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M13, M11, M04, confirm, M01, bulk-bar, action-bar | `admin.accessory-codes.index`, `admin.accessory-codes.bulk`, `admin.accessory-codes.kanban-print`, `admin.accessory-codes.kanban-prepare`, `admin.print-studio.print`, `admin.print-studio.jobs.status`, `admin.accessory-codes.kanban-runs.report`, `admin.accessory-codes.restore`, `admin.accessory-codes.online`, `admin.accessory-codes.offline`, `admin.accessory-codes.destroy` | PR-017, PR-021 | view accessory_codes\|admin | read-mostly `/m/accessory-codes` |
| `/admin/accessory-codes/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, gallery-picker, file-uploader | `admin.material-types.index`, `admin.accessory-codes.store`, `admin.media-library.list` | — | create accessory_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/accessory-codes/create` |
| `/admin/accessory-codes/kanban-runs/{run}` | A06·a | A06 hero /admin/orders/print-jobs · phase-2/archetypes/shots/A06a.png | client-side pdfme render then cloud print | data-table, tabs, status-chip, progress, alert, M01, M04, M08, table-states, M13, M11 | `admin.accessory-codes.kanban-runs.show`, `admin.accessory-codes.kanban-prepare`, `admin.print-studio.print`, `admin.print-studio.jobs.status`, `admin.accessory-codes.kanban-runs.report` | — | edit accessory_codes\|admin | dedicated `/m/accessory-codes/kanban-runs/{run}` |
| `/admin/accessory-codes/{accessoryCode}/edit` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | tabs: details / QR / kanban / procurement / print history; kanban print launch | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M07, M13, M11, money-input, M04, M01, combobox, gallery-picker, M05, file-uploader | `admin.accessory-codes.show`, `admin.accessory-codes.update`, `admin.media-library.list`, `admin.accessory-qr.show`, `admin.accessory-qr.repoint`, `admin.accessory-codes.retailer-kanbans.store`, `admin.accessory-codes.retailer-kanbans.update`, `admin.accessory-codes.procurement.update`, `admin.accessory-codes.kanban-print-history`, `admin.accessory-codes.kanban-prepare`, `admin.print-studio.print`, `admin.print-studio.jobs.status`, `admin.accessory-codes.kanban-runs.report`, `admin.accessory-codes.kanban-print` | — | edit accessory_codes\|admin | read-mostly `/m/accessory-codes/{accessoryCode}/edit` |
| `/admin/fabric-lining-rules` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, confirm, switch, M01 | `admin.fabric-lining-rules.index`, `admin.fabric-lining-rules.export`, `admin.fabric-lining-rules.restore`, `admin.fabric-lining-rules.toggle`, `admin.fabric-lining-rules.destroy` | — | view fabric_lining_rules\|admin | read-mostly `/m/fabric-lining-rules` |
| `/admin/fabric-lining-rules/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.material-attributes.index`, `admin.fabric-lining-rules.store` | — | create fabric_lining_rules\|admin | desktop-only-notice `/m/not-on-phone?to=/fabric-lining-rules/create` |
| `/admin/fabric-lining-rules/upload` | A04 | A04 hero /admin/designs/bulk-hub · phase-2/archetypes/shots/A04.png | — | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, M11, file-uploader | `admin.fabric-lining-rules.import.preview`, `admin.fabric-lining-rules.import.confirm` | — | create fabric_lining_rules\|admin | desktop-only-notice `/m/not-on-phone?to=/fabric-lining-rules/upload` |
| `/admin/fabric-lining-rules/{fabricLiningRule}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.fabric-lining-rules.show`, `admin.fabric-lining-rules.update` | — | edit fabric_lining_rules\|admin | desktop-only-notice `/m/not-on-phone?to=/fabric-lining-rules/{fabricLiningRule}/edit` |
| `/admin/lining-codes` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, M01 | `admin.lining-codes.index`, `admin.lining-codes.export`, `admin.lining-codes.restore`, `admin.lining-codes.online`, `admin.lining-codes.offline`, `admin.lining-codes.destroy` | — | view lining_codes\|admin | read-mostly `/m/lining-codes` |
| `/admin/lining-codes/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, gallery-picker, file-uploader | `admin.pt-colors.index`, `admin.lining-codes.store`, `admin.media-library.list` | — | create lining_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/lining-codes/create` |
| `/admin/lining-codes/import` | A04 | A04 hero /admin/designs/bulk-hub · phase-2/archetypes/shots/A04.png | — | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, file-uploader | `admin.lining-codes.export`, `admin.lining-codes.import.preview`, `admin.lining-codes.import.confirm`, `admin.lining-codes.import.cancel` | — | view lining_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/lining-codes/import` |
| `/admin/lining-codes/{liningCode}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, gallery-picker, file-uploader | `admin.lining-codes.show`, `admin.lining-codes.update`, `admin.media-library.list` | — | edit lining_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/lining-codes/{liningCode}/edit` |
| `/admin/material-attributes` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.material-attributes.index`, `admin.material-attributes.restore`, `admin.material-attributes.destroy` | — | view material_attributes\|admin | read-mostly `/m/material-attributes` |
| `/admin/material-attributes/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.material-attributes.store` | — | create material_attributes\|admin | desktop-only-notice `/m/not-on-phone?to=/material-attributes/create` |
| `/admin/material-attributes/{materialAttribute}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.material-attributes.show`, `admin.material-attributes.update` | — | edit material_attributes\|admin | desktop-only-notice `/m/not-on-phone?to=/material-attributes/{materialAttribute}/edit` |
| `/admin/material-types` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, combobox | `admin.material-types.index`, `admin.material-types.restore`, `admin.material-types.destroy` | — | admin | read-mostly `/m/material-types` |
| `/admin/material-types/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.system-values.index`, `admin.material-types.store` | — | admin | desktop-only-notice `/m/not-on-phone?to=/material-types/create` |
| `/admin/material-types/{material_type}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm | `admin.material-types.show`, `admin.material-types.update` | — | admin | desktop-only-notice `/m/not-on-phone?to=/material-types/{material_type}/edit` |
| `/admin/materials-guide` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | static explainer page, no record; read-only doc body | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet | — (static page: static explainer page (no data, no writes); visibility comes from admin.me.show / admin.me.menu in the shell) | — | admin | read-mostly `/m/materials-guide` |
| `/admin/materials/onboard` | A04 | A04 hero /admin/designs/bulk-hub · phase-2/archetypes/shots/A04.png | 5-step wizard with parked draft resume/discard | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, thumb, date, file-uploader | `admin.material-types.index`, `admin.material-types.store`, `admin.pt-components.store`, `admin.design-components.store`, `admin.component-suppliers.store`, `admin.accessory-codes.store` | — | create pt_components\|create suppliers\|create accessory_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/materials/onboard` |
| `/admin/reference/system-values` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | redirect only to /admin/system-values; no page to design; no-design · no-design: keep the row, spend no design effort (P0 default) | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.system-values.index` | — | view system_values\|admin | desktop-only-notice `/m/not-on-phone?to=/reference/system-values` |
| `/admin/special-handling-codes` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, switch | `admin.special-handling-codes.index`, `admin.special-handling-codes.toggle-status`, `admin.special-handling-codes.destroy` | — | view special-handling\|admin | read-mostly `/m/special-handling-codes` |
| `/admin/special-handling-codes/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07 | `admin.special-handling-codes.store` | — | create special-handling\|admin | desktop-only-notice `/m/not-on-phone?to=/special-handling-codes/create` |
| `/admin/special-handling-codes/{special_handling_code}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.special-handling-codes.show`, `admin.special-handling-codes.update` | — | edit special-handling\|admin | desktop-only-notice `/m/not-on-phone?to=/special-handling-codes/{special_handling_code}/edit` |
| `/admin/system-values` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | read-only enum catalogue | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.system-values.index` | — | admin | read-mostly `/m/system-values` |
| `/admin/units-of-measure` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, combobox | `admin.units-of-measure.index`, `admin.units-of-measure.restore`, `admin.units-of-measure.destroy` | — | admin | read-mostly `/m/units-of-measure` |
| `/admin/units-of-measure/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.system-values.index`, `admin.units-of-measure.store` | — | admin | desktop-only-notice `/m/not-on-phone?to=/units-of-measure/create` |
| `/admin/units-of-measure/{units_of_measure}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm | `admin.units-of-measure.show`, `admin.units-of-measure.update` | — | admin | desktop-only-notice `/m/not-on-phone?to=/units-of-measure/{units_of_measure}/edit` |
| `/admin/vendor-codes/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M14 | `admin.suppliers.index`, `admin.vendor-codes.store` | — | create vendor_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/vendor-codes/create` |
| `/admin/vendor-codes/{vendorCode}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.vendor-codes.show`, `admin.vendor-codes.update` | — | edit vendor_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/vendor-codes/{vendorCode}/edit` |

### fabrics (17)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/fabric-attributes/{type}` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | tabbed value-list cards; embedded surcharge editor | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, money-input, M01 | `admin.fabric-attributes.index`, `admin.fabric-attributes.export`, `admin.fabric-attributes.toggle-status`, `admin.fabric-attributes.destroy`, `admin.fabric-attributes.restore`, `admin.pattern-charges.update`, `admin.special-handling-codes.toggle-status`, `admin.special-handling-codes.destroy` | — | view fabric_attributes\|admin | read-mostly `/m/fabric-attributes/{type}` |
| `/admin/fabric-attributes/{type}/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.fabric-attributes.registry`, `admin.fabric-attributes.store` | — | create fabric_attributes\|admin | desktop-only-notice `/m/not-on-phone?to=/fabric-attributes/{type}/create` |
| `/admin/fabric-attributes/{type}/{id}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm | `admin.fabric-attributes.show`, `admin.fabric-attributes.update` | — | edit fabric_attributes\|admin | desktop-only-notice `/m/not-on-phone?to=/fabric-attributes/{type}/{id}/edit` |
| `/admin/fabric-codes` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | collection accordion with infinite scroll; expand-row tabbed editor with per-field autosave | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, combobox, thumb, file-uploader, M01 | `admin.fabrics.index`, `admin.fabric-codes.index`, `admin.fabric-codes.show`, `admin.fabric-codes.update`, `admin.media-library.list`, `admin.fabric-codes.export` | PR-029 | view fabric_codes\|admin | read-mostly `/m/fabric-codes` |
| `/admin/fabric-codes/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | fibre composition builder; media picker | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, gallery-picker, thumb, file-uploader | `admin.fabrics.index`, `admin.fabric-codes.store`, `admin.media-library.list` | — | create fabric_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/fabric-codes/create` |
| `/admin/fabric-codes/import` | A04 | A04 hero /admin/designs/bulk-hub · phase-2/archetypes/shots/A04.png | async preview poll; prune/link acknowledgement gates | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, file-uploader | `admin.fabric-codes.import`, `admin.fabric-codes.import.preview.status`, `admin.fabric-codes.import.cancel` | PR-021 | import fabric_codes | desktop-only-notice `/m/not-on-phone?to=/fabric-codes/import` |
| `/admin/fabric-codes/photos` | A04 | A04 hero /admin/designs/bulk-hub · phase-2/archetypes/shots/A04.png | direct-to-S3 presigned upload; batch poll | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, file-uploader | `admin.fabric-photos.preview`, `admin.fabric-photos.presign`, `admin.fabric-photos.confirm`, `admin.fabric-photos.batches.status` | — | import fabric_codes + import fabric_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/fabric-codes/photos` |
| `/admin/fabric-codes/photos/batches` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M01 | `admin.fabric-photos.batches.index` | — | import fabric_codes + import fabric_codes\|admin | read-mostly `/m/fabric-codes/photos/batches` |
| `/admin/fabric-codes/photos/batches/{batch}` | A06·a | A06 hero /admin/orders/print-jobs · phase-2/archetypes/shots/A06a.png | — | data-table, tabs, status-chip, progress, alert, M01, M04, M08, table-states | `admin.fabric-photos.batches.show`, `admin.fabric-photos.batches.status`, `admin.fabric-photos.batches.csv` | — | import fabric_codes + import fabric_codes\|admin | dedicated `/m/fabric-codes/photos/batches/{batch}` |
| `/admin/fabric-codes/{fabric_code}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | fibre composition builder; media picker | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, gallery-picker, thumb, file-uploader | `admin.fabric-codes.show`, `admin.fabric-codes.update`, `admin.media-library.list` | — | edit fabric_codes\|admin | desktop-only-notice `/m/not-on-phone?to=/fabric-codes/{fabric_code}/edit` |
| `/admin/fabrics` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | infinite scroll; drag-sort; archive switch with cascade | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, M11, confirm, M01 | `admin.fabrics.index`, `admin.fabrics.reorder`, `admin.fabrics.destroy`, `admin.fabrics.export` | — | view fabrics\|admin | read-mostly `/m/fabrics` |
| `/admin/fabrics/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.suppliers.index`, `admin.fabrics.store` | — | create fabrics\|admin | desktop-only-notice `/m/not-on-phone?to=/fabrics/create` |
| `/admin/fabrics/{fabric}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.suppliers.index`, `admin.fabrics.update` | — | edit fabrics\|admin | desktop-only-notice `/m/not-on-phone?to=/fabrics/{fabric}/edit` |
| `/admin/forecast-accuracy` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | — | kpi-tile, data-table, chart-frame, M08 | `admin.reports.forecast-accuracy` | — | admin + view orders\|admin | read-mostly `/m/forecast-accuracy` |
| `/admin/incoming-components` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | board/list view toggle; tab + lens filters | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, switch | `admin.reports.incoming-components` | — | admin + view orders\|admin | read-mostly `/m/incoming-components` |
| `/admin/pattern` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | — | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, money-input | `admin.pattern-charges.show`, `admin.pattern-charges.update` | — | pattern_design_add_on\|admin | read-mostly `/m/pattern` |
| `/admin/stock-report` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | tabs: overview / explore; live code search | kpi-tile, data-table, chart-frame, M08, date | `admin.reports.stock`, `admin.reports.stock.events`, `admin.reports.stock.search` | — | admin + view fabric_codes\|admin | read-mostly `/m/stock-report` |

### factory (13)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/delivery-routing` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | — | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm | `admin.delivery-routing.index`, `admin.delivery-routing.rules.store`, `admin.delivery-routing.rules.destroy`, `admin.delivery-routing.overrides.store`, `admin.delivery-routing.overrides.destroy` | — | view factories\|admin | read-mostly `/m/delivery-routing` |
| `/admin/factories` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | per-row load calc; drag-sort; online switch | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, switch | `admin.factories.index`, `admin.factories.load-factor`, `admin.factories.reorder`, `admin.factories.offline` | PR-022, PR-060 | view factories\|admin | read-mostly `/m/factories` |
| `/admin/factories/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, money-input | `admin.products.index`, `admin.factories.store` | — | create factories\|admin | desktop-only-notice `/m/not-on-phone?to=/factories/create` |
| `/admin/factories/loadFactor` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | — | kpi-tile, data-table, chart-frame, M08 | `admin.factories.index`, `admin.factories.load-factor` | — | view factories\|admin | read-mostly `/m/factories/loadFactor` |
| `/admin/factories/{factory}/edit` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | combination/product matrix in form; vendor-code books sub-table | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet | `admin.factories.show`, `admin.factories.update`, `admin.vendor-codes.store`, `admin.vendor-codes.update`, `admin.vendor-codes.destroy`, `admin.vendor-codes.restore` | — | edit factories\|admin | read-mostly `/m/factories/{factory}/edit` |
| `/admin/factory_groups` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.factory-groups.index`, `admin.factory-groups.destroy` | — | view factory groups\|admin | read-mostly `/m/factory_groups` |
| `/admin/factory_groups/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | factory weights must sum to 1.0 | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.factories.index`, `admin.factory-groups.store` | — | view factories\|admin | desktop-only-notice `/m/not-on-phone?to=/factory_groups/create` |
| `/admin/factory_groups/{factory_group}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | factory weights must sum to 1.0 | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.factories.index`, `admin.factory-groups.update` | — | view factories\|admin | desktop-only-notice `/m/not-on-phone?to=/factory_groups/{factory_group}/edit` |
| `/admin/logs/factory-allocations` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | log tail, monospace, refresh | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.logs.factory-allocations` | — | view logs\|admin | read-mostly `/m/logs/factory-allocations` |
| `/admin/suppliers` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | drag-sort; archive switch with cascade | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.suppliers.directory`, `admin.suppliers.reorder`, `admin.suppliers.destroy` | — | view suppliers\|admin | read-mostly `/m/suppliers` |
| `/admin/suppliers/codes` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.vendor-codes.index`, `admin.vendor-codes.destroy`, `admin.vendor-codes.restore`, `admin.vendor-codes.reorder` | — | view vendor_codes\|admin | read-mostly `/m/suppliers/codes` |
| `/admin/suppliers/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.suppliers.store` | — | create suppliers\|admin | desktop-only-notice `/m/not-on-phone?to=/suppliers/create` |
| `/admin/suppliers/{supplier}/edit` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | tabs: identity+cadence / vendor-code books / component bindings | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M09, combobox | `admin.suppliers.directory`, `admin.suppliers.update`, `admin.suppliers.destroy`, `admin.vendor-codes.store`, `admin.vendor-codes.update`, `admin.vendor-codes.destroy`, `admin.vendor-codes.restore`, `admin.component-suppliers.store`, `admin.component-suppliers.update`, `admin.component-suppliers.destroy`, `admin.component-suppliers.restore` | — | edit suppliers\|admin | read-mostly `/m/suppliers/{supplier}/edit` |

### shipping (21)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/shipping/containers` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | active/history tabs; print ticket PDF (stays server PDF, Q26) | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M04, M01 | `admin.shipping.containers.index`, `admin.shipping.containers.print`, `admin.shipping.containers.markPrinted` | — | admin + manage shipping | read-mostly `/m/shipping/containers` |
| `/admin/shipping/containers/{container}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | force attach/remove order (money, idempotency); print ticket PDF (server PDF) | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M13, money-input, M04, M01 | `admin.shipping.containers.show`, `admin.shipping.containers.print`, `admin.shipping.containers.digitalTicket`, `admin.shipping.containers.forceAttach`, `admin.shipping.containers.forceRemove` | — | admin + manage shipping | read-mostly `/m/shipping/containers/{container}` |
| `/admin/shipping/containers/{container}/ticket` | A10 | A10 hero /admin/email-templates/{templateKey}/edit · phase-2/archetypes/shots/A10.png | thermal label size, QR | field, segmented, badge, timeline, M05, save-bar, unsaved-guard, M13, M04 | `admin.shipping.containers.digitalTicket` | — | admin + manage shipping | read-mostly `/m/shipping/containers/{container}/ticket` |
| `/admin/shipping/couriers` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.shipping.couriers.index`, `admin.shipping.couriers.store` | — | admin + manage shipping | read-mostly `/m/shipping/couriers` |
| `/admin/shipping/couriers/{courier}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | zones sub-table; create-zone modal with ISO country picker | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, combobox | `admin.shipping.couriers.show`, `admin.shipping.couriers.update`, `admin.shipping.couriers.destroy`, `admin.shipping.zones.store`, `admin.reference.countries` | — | admin + manage shipping | read-mostly `/m/shipping/couriers/{courier}` |
| `/admin/shipping/couriers/{courier}/zones/{zone}` | A12 | A12 hero /admin/pricing/create · phase-2/archetypes/shots/A12.png | JSON import preview/apply; bulk activate/deactivate bands | M02, combobox, toast, error-states, density, M11, confirm, stepper, review-step, file-uploader, M05, bulk-bar, action-bar, M01 | `admin.shipping.zones.show`, `admin.shipping.bands.bulk`, `admin.shipping.bands.download`, `admin.shipping.bands.preview`, `admin.shipping.bands.apply`, `admin.shipping.bands.cancel`, `admin.shipping.bands.store`, `admin.shipping.bands.update`, `admin.shipping.bands.destroy` | — | admin + manage shipping | read-mostly `/m/shipping/couriers/{courier}/zones/{zone}` |
| `/admin/shipping/customs-codes` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | missing-records callout | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.customs-products.index` | — | admin + manage shipping | read-mostly `/m/shipping/customs-codes` |
| `/admin/shipping/customs-codes/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.products.index`, `admin.customs-products.store` | — | admin + manage shipping | desktop-only-notice `/m/not-on-phone?to=/shipping/customs-codes/create` |
| `/admin/shipping/customs-codes/{customsCode}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.customs-products.show`, `admin.customs-products.update` | — | admin + manage shipping | desktop-only-notice `/m/not-on-phone?to=/shipping/customs-codes/{customsCode}/edit` |
| `/admin/shipping/declaration-composition-map` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.declaration-composition-map.index`, `admin.declaration-composition-map.destroy` | — | admin + manage shipping | read-mostly `/m/shipping/declaration-composition-map` |
| `/admin/shipping/declaration-composition-map/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.declaration-profiles.index`, `admin.declaration-composition-map.store` | — | admin + manage shipping | desktop-only-notice `/m/not-on-phone?to=/shipping/declaration-composition-map/create` |
| `/admin/shipping/declaration-composition-map/{declarationCompositionMap}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.declaration-composition-map.index`, `admin.declaration-composition-map.update` | — | admin + manage shipping | desktop-only-notice `/m/not-on-phone?to=/shipping/declaration-composition-map/{declarationCompositionMap}/edit` |
| `/admin/shipping/declaration-profiles` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.declaration-profiles.index`, `admin.declaration-profiles.destroy`, `admin.declaration-profiles.restore` | — | admin + manage shipping | read-mostly `/m/shipping/declaration-profiles` |
| `/admin/shipping/declaration-profiles/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | quantity line editor | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.customs-products.index`, `admin.declaration-profiles.store` | — | admin + manage shipping | desktop-only-notice `/m/not-on-phone?to=/shipping/declaration-profiles/create` |
| `/admin/shipping/declaration-profiles/{declarationProfile}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | quantity line editor | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm | `admin.declaration-profiles.show`, `admin.declaration-profiles.update` | — | admin + manage shipping | desktop-only-notice `/m/not-on-phone?to=/shipping/declaration-profiles/{declarationProfile}/edit` |
| `/admin/shipping/settings` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | long sectioned DHL config, timezone + country pickers | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, M09, M04, combobox | `admin.shipping.settings.show`, `admin.shipping.settings.update`, `admin.reference.timezones` | — | admin + manage shipping | read-mostly `/m/shipping/settings` |
| `/admin/shipping/shipments` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | union source tabs incl DHL requests roll-up | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, date | `admin.shipping.shipments.index` | — | admin + manage shipping | read-mostly `/m/shipping/shipments` |
| `/admin/shipping/shipments/requests/{order}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | per-leg attempt timeline; 8 DHL recovery actions (one scope-gated) | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M04 | `admin.shipping.shipments.requests.show`, `admin.shipping.dhl-recovery.rebookPickup`, `admin.shipping.dhl-recovery.reconcilePickup`, `admin.shipping.dhl-recovery.relinkLabelKey`, `admin.shipping.dhl-recovery.resolveDeclaration`, `admin.shipping.dhl-recovery.retryLeg`, `admin.shipping.dhl-recovery.rerunDeclaration`, `admin.shipping.dhl-recovery.forceReleasePickup`, `admin.shipping.dhl-recovery.cancelPickup` | — | admin + manage shipping | read-mostly `/m/shipping/shipments/requests/{order}` |
| `/admin/shipping/shipments/{shipment}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | — | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M04 | `admin.shipping.shipments.show`, `admin.shipping.shipments.markDelivered`, `admin.shipping.shipments.reprintLabel` | — | admin + manage shipping | read-mostly `/m/shipping/shipments/{shipment}` |
| `/admin/shipping/zones` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.shipping.zones.index` | — | admin + manage shipping | read-mostly `/m/shipping/zones` |
| `/admin/shipping/zones/{zone}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm | `admin.shipping.zones.show`, `admin.shipping.zones.update`, `admin.shipping.zones.destroy`, `admin.reference.countries` | — | admin + manage shipping | desktop-only-notice `/m/not-on-phone?to=/shipping/zones/{zone}/edit` |

### vision-checks (21)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/fitq-config` | A04 | A04 hero /admin/designs/bulk-hub · phase-2/archetypes/shots/A04.png | read-only matrix list per product type above import; per-type JSON download | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, M11, file-uploader | `admin.fitq.config`, `admin.fitq.download`, `admin.fitq.import`, `admin.fitq.import.confirm`, `admin.fitq.import.cancel` | — | admin | desktop-only-notice `/m/not-on-phone?to=/fitq-config` |
| `/admin/fitting-validations` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | two tables (hard limits, cross-measurement rules); JSON exports | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, M01 | `admin.fitting-validations.limits.index`, `admin.fitting-validations.rules.index`, `admin.fitting-validations.export` | — | manage fitting validations\|admin + admin | read-mostly `/m/fitting-validations` |
| `/admin/fitting-validations/limits/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.fitting-validations.limits.store` | — | manage fitting validations\|admin + admin | desktop-only-notice `/m/not-on-phone?to=/fitting-validations/limits/create` |
| `/admin/fitting-validations/limits/{id}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.fitting-validations.limits.index`, `admin.fitting-validations.limits.update` | — | manage fitting validations\|admin + admin | desktop-only-notice `/m/not-on-phone?to=/fitting-validations/limits/{id}/edit` |
| `/admin/fitting-validations/rules/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.fitting-validations.rules.store` | — | manage fitting validations\|admin + admin | desktop-only-notice `/m/not-on-phone?to=/fitting-validations/rules/create` |
| `/admin/fitting-validations/rules/{id}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.fitting-validations.rules.index`, `admin.fitting-validations.rules.update` | — | manage fitting validations\|admin + admin | desktop-only-notice `/m/not-on-phone?to=/fitting-validations/rules/{id}/edit` |
| `/admin/fitting-validations/upload` | A04 | A04 hero /admin/designs/bulk-hub · phase-2/archetypes/shots/A04.png | — | stepper, review-step, wizard-action-bar, M05, confirm, M01, error-states, M11, file-uploader | `admin.fitting-validations.import`, `admin.fitting-validations.import.confirm`, `admin.fitting-validations.import.cancel` | — | manage fitting validations\|admin + admin | desktop-only-notice `/m/not-on-phone?to=/fitting-validations/upload` |
| `/admin/vision-checks/dashboard` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | kill switch + reset breaker controls | kpi-tile, data-table, chart-frame, M08, switch | `admin.vision-checks.dashboard.index`, `admin.vision-checks.kill-switch.toggle`, `admin.vision-checks.breaker.reset` | — | view vision_checks\|admin | read-mostly `/m/vision-checks/dashboard` |
| `/admin/vision-checks/failure-reasons/manage` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | bilingual chips with machine-translate (paid); checkpoint/category toggle tree | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, M14, M07, M15, M11, M04, combobox | `admin.vision-checks.failure-reasons.index`, `admin.vision-checks.failure-reasons.children`, `admin.vision-checks.failure-reasons.store`, `admin.vision-checks.failure-reasons.update`, `admin.vision-checks.failure-reasons.toggle-module`, `admin.vision-checks.failure-reasons.toggle-checkpoint`, `admin.vision-checks.failure-reasons.toggle-category`, `admin.vision-checks.failure-reasons.translate-suggest` | — | view vision_checks\|admin | read-mostly `/m/vision-checks/failure-reasons/manage` |
| `/admin/vision-checks/failure-reasons/report` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | drill rows with photo thumbnails | kpi-tile, data-table, chart-frame, M08, thumb, M01 | `admin.vision-checks.failure-reasons.report`, `admin.vision-checks.failure-reasons.report-export` | — | view vision_checks\|admin | read-mostly `/m/vision-checks/failure-reasons/report` |
| `/admin/vision-checks/instructions` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M04, confirm | `admin.vision-checks.instructions.index`, `admin.vision-checks.instructions.retire` | — | view vision_checks\|admin | read-mostly `/m/vision-checks/instructions` |
| `/admin/vision-checks/instructions/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.vision-checks.checkpoints.index`, `admin.vision-checks.instructions.store` | — | create vision_checks\|admin | desktop-only-notice `/m/not-on-phone?to=/vision-checks/instructions/create` |
| `/admin/vision-checks/instructions/{visionInstructionTemplate}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.vision-checks.instructions.index`, `admin.vision-checks.checkpoints.index`, `admin.vision-checks.instructions.update` | — | edit vision_checks\|admin | desktop-only-notice `/m/not-on-phone?to=/vision-checks/instructions/{visionInstructionTemplate}/edit` |
| `/admin/vision-checks/models` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.vision-checks.models.index`, `admin.vision-checks.models.restore`, `admin.vision-checks.models.destroy` | — | view vision_checks\|admin | read-mostly `/m/vision-checks/models` |
| `/admin/vision-checks/models/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | model picker | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.ai.models`, `admin.vision-checks.models.store` | — | create vision_checks\|admin | desktop-only-notice `/m/not-on-phone?to=/vision-checks/models/create` |
| `/admin/vision-checks/models/{visionModelProfile}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | model picker; refresh capabilities | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.vision-checks.models.show`, `admin.ai.models`, `admin.vision-checks.models.update`, `admin.vision-checks.models.refresh-capabilities` | — | edit vision_checks\|admin | desktop-only-notice `/m/not-on-phone?to=/vision-checks/models/{visionModelProfile}/edit` |
| `/admin/vision-checks/results` | A08 | self: A08 hero · phase-2/archetypes/shots/A08.png | re-run (paid, throttled); human PASS/FAIL verdict | card-gallery, M10, tabs, status-chip, sheet, kbd, thumb | `admin.vision-checks.results.index`, `admin.vision-checks.results.rerun`, `admin.vision-checks.results.resolve` | PR-024, PR-034 | view vision_checks\|admin | dedicated `/m/vision-checks/results` |
| `/admin/vision-checks/rules` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.vision-checks.rules.index`, `admin.vision-checks.rules.restore`, `admin.vision-checks.rules.destroy` | — | view vision_checks\|admin | read-mostly `/m/vision-checks/rules` |
| `/admin/vision-checks/rules/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | prompt editor + instruction library; model picker | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.vision-checks.rules.form-options`, `admin.ai.models`, `admin.vision-checks.instructions.store`, `admin.vision-checks.rules.store` | — | create vision_checks\|admin | desktop-only-notice `/m/not-on-phone?to=/vision-checks/rules/create` |
| `/admin/vision-checks/rules/{visionCheckRule}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | prompt editor + instruction library; model picker | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.vision-checks.rules.show`, `admin.vision-checks.rules.form-options`, `admin.ai.models`, `admin.vision-checks.instructions.store`, `admin.vision-checks.rules.update` | — | edit vision_checks\|admin | desktop-only-notice `/m/not-on-phone?to=/vision-checks/rules/{visionCheckRule}/edit` |
| `/admin/vision-checks/settings` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | model picker A/B | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, combobox | `admin.vision-checks.settings.index`, `admin.ai.models`, `admin.vision-checks.default-models.update`, `admin.vision-checks.blur-threshold.update`, `admin.vision-checks.retry-attempts.update` | — | view vision_checks\|admin | read-mostly `/m/vision-checks/settings` |

## Wave 4 · content · ops · micro-apps · wechat · ai · settings · dashboard · print-studio (81 pages)

### content (43)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/article-analytics` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | — | kpi-tile, data-table, chart-frame, M08 | `admin.article-analytics.index` | — | view article analytics\|admin | read-mostly `/m/article-analytics` |
| `/admin/article-analytics/retailer/{userId}` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | — | kpi-tile, data-table, chart-frame, M08 | `admin.article-analytics.retailer` | — | view article analytics\|admin | read-mostly `/m/article-analytics/retailer/{userId}` |
| `/admin/article-categories` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | drag-sort rows | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm | `admin.article-categories.index`, `admin.article-categories.reorder`, `admin.article-categories.destroy` | — | view articles\|admin | read-mostly `/m/article-categories` |
| `/admin/article-categories/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07 | `admin.article-categories.store` | — | view articles\|admin + create articles\|admin | desktop-only-notice `/m/not-on-phone?to=/article-categories/create` |
| `/admin/article-categories/{id}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07 | `admin.article-categories.show`, `admin.article-categories.update` | — | view articles\|admin + edit articles\|admin | desktop-only-notice `/m/not-on-phone?to=/article-categories/{id}/edit` |
| `/admin/articles` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.articles.index`, `admin.article-categories.index`, `admin.articles.publish`, `admin.articles.archive`, `admin.articles.destroy` | — | view articles\|admin | read-mostly `/m/articles` |
| `/admin/articles/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | rich-text body editor with inline image upload; Bench destination / recipient picker | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M16, M11, thumb, file-uploader | `admin.article-categories.index`, `admin.micro-apps.index`, `admin.articles.upload-image`, `admin.articles.store` | — | view articles\|admin + create articles\|admin | desktop-only-notice `/m/not-on-phone?to=/articles/create` |
| `/admin/articles/{id}/analytics` | A05 | A05 hero /admin/dashboard · phase-2/archetypes/shots/A05.png | — | kpi-tile, data-table, chart-frame, M08 | `admin.articles.analytics` | — | view article analytics\|admin | read-mostly `/m/articles/{id}/analytics` |
| `/admin/articles/{id}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | rich-text body editor; attachment queue (10 files); engagement summary side card | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M16, confirm, M01, thumb, date, chart-frame, file-uploader | `admin.articles.show`, `admin.article-categories.index`, `admin.micro-apps.index`, `admin.articles.upload-image`, `admin.articles.analytics`, `admin.articles.update`, `admin.articles.publish`, `admin.articles.archive`, `admin.articles.attachments.store`, `admin.articles.attachments.destroy` | — | view articles\|admin + edit articles\|admin | desktop-only-notice `/m/not-on-phone?to=/articles/{id}/edit` |
| `/admin/automated-emails` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | kill-switch toggle per row with confirm | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, switch | `admin.automated-emails.index`, `admin.automated-emails.toggle` | — | manage automated emails\|admin | read-mostly `/m/automated-emails` |
| `/admin/automated-emails/{key}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | kill-switch toggle in header | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M11, switch | `admin.automated-emails.show`, `admin.automated-emails.toggle` | — | manage automated emails\|admin | read-mostly `/m/automated-emails/{key}` |
| `/admin/billboards` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, thumb | `admin.billboards.index`, `admin.billboards.publish`, `admin.billboards.archive` | — | view billboards\|admin | read-mostly `/m/billboards` |
| `/admin/billboards/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, thumb, file-uploader | `admin.accounts.index`, `admin.billboards.upload-image`, `admin.billboards.store` | — | view billboards\|admin + create billboards\|admin | desktop-only-notice `/m/not-on-phone?to=/billboards/create` |
| `/admin/billboards/{id}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm, thumb, file-uploader | `admin.billboards.show`, `admin.accounts.index`, `admin.billboards.upload-image`, `admin.billboards.update`, `admin.billboards.publish`, `admin.billboards.archive` | — | view billboards\|admin + edit billboards\|admin | desktop-only-notice `/m/not-on-phone?to=/billboards/{id}/edit` |
| `/admin/drip-sequences` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | global drip kill-switch banner | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, confirm, switch, M05 | `admin.drip-sequences.index`, `admin.drip-sequences.gate`, `admin.automated-emails.toggle`, `admin.drip-sequences.archive` | — | view drip sequences\|admin | read-mostly `/m/drip-sequences` |
| `/admin/drip-sequences/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | repeatable step rows | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.micro-apps.index`, `admin.drip-sequences.defaults`, `admin.drip-sequences.store` | — | view drip sequences\|admin + create drip sequences\|admin | desktop-only-notice `/m/not-on-phone?to=/drip-sequences/create` |
| `/admin/drip-sequences/{id}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | repeatable step rows, per-step forms; live-enrolment warning | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04, confirm | `admin.drip-sequences.show`, `admin.drip-enrolments.index`, `admin.micro-apps.index`, `admin.drip-sequences.update`, `admin.drip-sequences.archive`, `admin.drip-sequences.steps.store`, `admin.drip-sequences.steps.update`, `admin.drip-sequences.steps.deactivate` | — | view drip sequences\|admin + edit drip sequences\|admin | desktop-only-notice `/m/not-on-phone?to=/drip-sequences/{id}/edit` |
| `/admin/email-templates` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.email-templates.index` | — | manage email templates\|admin | read-mostly `/m/email-templates` |
| `/admin/email-templates/house-style` | A10 | A10 hero /admin/email-templates/{templateKey}/edit · phase-2/archetypes/shots/A10.png | frame-wide edit warning (wraps N templates); version history drawer + diff | field, segmented, badge, timeline, M05, save-bar, unsaved-guard, M11, switch, date | `admin.email-templates.show`, `admin.email-templates.update`, `admin.email-templates.preview`, `admin.email-templates.reset`, `admin.email-templates.send-proof`, `admin.email-templates.versions.index`, `admin.email-templates.versions.show`, `admin.email-templates.versions.revert` | — | manage email templates\|admin | read-mostly `/m/email-templates/house-style` |
| `/admin/email-templates/{templateKey}/edit` | A10 | self: A10 hero · phase-2/archetypes/shots/A10.png | version history drawer + diff; send proof | field, segmented, badge, timeline, M05, save-bar, unsaved-guard, M11, switch, date | `admin.email-templates.show`, `admin.email-templates.update`, `admin.email-templates.preview`, `admin.email-templates.reset`, `admin.email-templates.send-proof`, `admin.email-templates.versions.index`, `admin.email-templates.versions.show`, `admin.email-templates.versions.revert` | — | manage email templates\|admin | read-mostly `/m/email-templates/{templateKey}/edit` |
| `/admin/email-templates/{templateKey}/versions` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, M05 | `admin.email-templates.versions.index`, `admin.email-templates.versions.revert` | — | manage email templates\|admin | read-mostly `/m/email-templates/{templateKey}/versions` |
| `/admin/email-templates/{templateKey}/versions/{version}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | diff vs current | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M05 | `admin.email-templates.versions.show`, `admin.email-templates.versions.revert` | — | manage email templates\|admin | read-mostly `/m/email-templates/{templateKey}/versions/{version}` |
| `/admin/media-library` | A08 | A08 hero /admin/vision-checks/results · phase-2/archetypes/shots/A08.png | file-manager tree + folder ops (create/rename/move/zip); soft-delete to .trash | card-gallery, M10, tabs, status-chip, sheet, kbd, M15, confirm, gallery-picker, thumb, file-uploader, M01 | `admin.media-library.list`, `admin.media-library.files.upload`, `admin.media-library.folders.create`, `admin.media-library.files.rename`, `admin.media-library.files.copy`, `admin.media-library.files.delete`, `admin.media-library.download`, `admin.media-library.file`, `admin.media-library.archives.create` | — | media_library\|admin | read-mostly `/m/media-library` |
| `/admin/news` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.news.index`, `admin.news.destroy` | — | view news\|admin | read-mostly `/m/news` |
| `/admin/photoMarket/categories` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M14, thumb | `admin.photo-market.categories.store` | — | view photo-market\|admin | desktop-only-notice `/m/not-on-phone?to=/photoMarket/categories` |
| `/admin/photoMarket/combo` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, thumb | `admin.photo-market.combos.store` | — | view photo-market\|admin | desktop-only-notice `/m/not-on-phone?to=/photoMarket/combo` |
| `/admin/photoMarket/combo_category` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | per-currency price columns; media-picker modal | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, money-input, gallery-picker, thumb, date | `admin.photo-market.categories.index`, `admin.currencies.index`, `admin.photo-market.category-months`, `admin.media-library.list`, `admin.photo-market.combo-categories.store` | — | view photo-market\|admin | desktop-only-notice `/m/not-on-phone?to=/photoMarket/combo_category` |
| `/admin/photoMarket/editCategory/{id}` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm | `admin.photo-market.categories.show`, `admin.photo-market.categories.update` | — | view photo-market\|admin | desktop-only-notice `/m/not-on-phone?to=/photoMarket/editCategory/{id}` |
| `/admin/photoMarket/editComboCategory/{id}` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | per-currency price columns; media-picker modal | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, money-input, confirm, gallery-picker, thumb, date | `admin.photo-market.combo-categories.show`, `admin.currencies.index`, `admin.photo-market.category-months`, `admin.media-library.list`, `admin.photo-market.combo-categories.update` | — | view photo-market\|admin | desktop-only-notice `/m/not-on-phone?to=/photoMarket/editComboCategory/{id}` |
| `/admin/photoMarket/editMonth/{id}` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | per-currency price columns | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, money-input, confirm, date | `admin.photo-market.months.show`, `admin.currencies.index`, `admin.photo-market.months.update` | — | view photo-market\|admin | desktop-only-notice `/m/not-on-phone?to=/photoMarket/editMonth/{id}` |
| `/admin/photoMarket/editPhoto/{id}` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | media-picker image set | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, confirm, gallery-picker, thumb, date | `admin.photo-market.photos.show`, `admin.media-library.list`, `admin.photo-market.photos.update` | — | view photo-market\|admin | desktop-only-notice `/m/not-on-phone?to=/photoMarket/editPhoto/{id}` |
| `/admin/photoMarket/listCategories` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | drag-sort; active switch | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, switch, thumb | `admin.photo-market.categories.index`, `admin.photo-market.categories.reorder`, `admin.photo-market.categories.active` | — | edit photo-market\|admin | read-mostly `/m/photoMarket/listCategories` |
| `/admin/photoMarket/listComboCategories` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | drag-sort; active switch | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, switch, thumb, date | `admin.photo-market.combo-categories.index`, `admin.photo-market.combo-categories.reorder`, `admin.photo-market.combo-categories.active`, `admin.photo-market.combos.months` | — | view photo-market\|admin | read-mostly `/m/photoMarket/listComboCategories` |
| `/admin/photoMarket/listCombos` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | drag-sort; active switch | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, switch, thumb | `admin.photo-market.combos.index`, `admin.photo-market.combos.reorder`, `admin.photo-market.combos.active` | — | edit photo-market\|admin | read-mostly `/m/photoMarket/listCombos` |
| `/admin/photoMarket/listMonths` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | drag-sort; active switch | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, switch, thumb, date | `admin.photo-market.months.index`, `admin.photo-market.months.reorder`, `admin.photo-market.months.active` | — | edit photo-market\|admin | read-mostly `/m/photoMarket/listMonths` |
| `/admin/photoMarket/listPhotos` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | thumbnail column; drag-sort; active switch | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M14, confirm, switch, thumb, date | `admin.photo-market.photos.index`, `admin.photo-market.photos.reorder`, `admin.photo-market.photos.active` | — | edit photo-market\|admin | read-mostly `/m/photoMarket/listPhotos` |
| `/admin/photoMarket/month` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | per-currency price columns | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, money-input, thumb, date | `admin.photo-market.categories.index`, `admin.currencies.index`, `admin.photo-market.months.store` | — | view photo-market\|admin | desktop-only-notice `/m/not-on-phone?to=/photoMarket/month` |
| `/admin/photoMarket/photos` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | media-picker image set | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, gallery-picker, thumb, date | `admin.photo-market.months.index`, `admin.media-library.list`, `admin.photo-market.photos.store` | — | view photo-market\|admin | desktop-only-notice `/m/not-on-phone?to=/photoMarket/photos` |
| `/admin/posts` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | dead route: aborts 403 for everyone; drop or redirect, do not design; no-design · no-design: keep the row, spend no design effort (P0 default) | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | — (no-design page: no REST operation by decision; see PR-079) | PR-079 | n/a: no-design page | desktop-only-notice `/m/not-on-phone?to=/posts` |
| `/admin/posts/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | news vs training variant switch | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07, M11, thumb, file-uploader | `admin.accounts.index`, `admin.training-categories.index`, `admin.training-categories.subcategories`, `admin.news.store`, `admin.trainings.store` | — | view trainings\|admin | desktop-only-notice `/m/not-on-phone?to=/posts/create` |
| `/admin/posts/{post}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | news vs training variant switch | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M07, M11, thumb | `admin.trainings.show`, `admin.accounts.index`, `admin.training-categories.index`, `admin.training-categories.subcategories`, `admin.news.update`, `admin.trainings.update` | — | view trainings\|admin | desktop-only-notice `/m/not-on-phone?to=/posts/{post}/edit` |
| `/admin/trainings` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | row status toggle | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, confirm, switch | `admin.trainings.index`, `admin.training-categories.index`, `admin.training-categories.subcategories`, `admin.trainings.status`, `admin.trainings.destroy` | — | view trainings\|admin | read-mostly `/m/trainings` |
| `/admin/watermark-text` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | developer test page that writes a file to disk; drop, do not design; no-design · no-design: keep the row, spend no design effort (P0 default) | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, thumb | — (no-design page: no REST operation by decision; see PR-079) | PR-079 | n/a: no-design page | desktop-only-notice `/m/not-on-phone?to=/watermark-text` |

### ops (11)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/event/admin_events` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | — | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, M05 | `admin.events.self.index`, `admin.events.self.subscriptions` | — | list events\|admin | read-mostly `/m/event/admin_events` |
| `/admin/event/userList` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.events.index` | — | create events\|edit events\|admin | read-mostly `/m/event/userList` |
| `/admin/events` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.events.index` | — | create events\|edit events\|admin | read-mostly `/m/events` |
| `/admin/events/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | bulk assign events to many users (select-all) | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.events.catalogue`, `admin.accounts.index`, `admin.events.bulk` | — | events\|admin | desktop-only-notice `/m/not-on-phone?to=/events/create` |
| `/admin/events/subscribe/{id}` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.events.show`, `admin.events.subscriptions.update` | — | list events\|admin | desktop-only-notice `/m/not-on-phone?to=/events/subscribe/{id}` |
| `/admin/events/{event}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.events.show`, `admin.events.catalogue`, `admin.events.replace` | — | list events\|admin | desktop-only-notice `/m/not-on-phone?to=/events/{event}/edit` |
| `/admin/failed-jobs` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | exception/payload drill to detail | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M11, confirm, M01 | `admin.failed-jobs.index`, `admin.failed-jobs.bulk-destroy`, `admin.failed-jobs.destroy` | PR-028 | admin | read-mostly `/m/failed-jobs` |
| `/admin/failed-jobs/{id}` | A02·a | A02 hero /admin/orders/{order} · phase-2/archetypes/shots/A02a.png | full stack trace + payload JSON viewer | record-header, tabs, key-value, description-list, timeline, alert, confirm, toast, sheet, M11, M01 | `admin.failed-jobs.show`, `admin.failed-jobs.destroy` | — | admin | read-mostly `/m/failed-jobs/{id}` |
| `/admin/job/batches` | A06·a | A06 hero /admin/orders/print-jobs · phase-2/archetypes/shots/A06a.png | realtime Echo row updates | data-table, tabs, status-chip, progress, alert, M01, M04, M08, table-states | `admin.dashboard.job-batches`, `admin.dashboard.training-export` | PR-028 | job_batches | dedicated `/m/job/batches` |
| `/admin/observability` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | — | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm | `admin.observability.index`, `admin.observability.update` | — | admin | read-mostly `/m/observability` |
| `/admin/schedule-monitor` | A06·a | A06 hero /admin/orders/print-jobs · phase-2/archetypes/shots/A06a.png | read-only, latest log per task | data-table, tabs, status-chip, progress, alert, M01, M04, M08, table-states | `admin.schedule-monitor.index` | PR-028 | admin | dedicated `/m/schedule-monitor` |

### micro-apps (9)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/app-subscriptions` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | pivot matrix view (retailers x apps), read-only; streamed CSV | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M01 | `admin.app-subscriptions.index`, `admin.app-subscriptions.export` | — | view micro_apps\|admin | read-mostly `/m/app-subscriptions` |
| `/admin/micro-apps` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | Stripe sync button | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, money-input, confirm | `admin.micro-apps.index`, `admin.micro-apps.destroy`, `admin.micro-apps.stripe-sync` | — | view micro_apps\|admin | read-mostly `/m/micro-apps` |
| `/admin/micro-apps/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | hero + gallery uploads; brand_surfaces rows | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, money-input, gallery-picker, thumb, file-uploader | `admin.micro-apps.store` | — | create micro_apps\|admin | desktop-only-notice `/m/not-on-phone?to=/micro-apps/create` |
| `/admin/micro-apps/{micro_app}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | gallery drag-reorder / delete; brand_surfaces rows | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M14, confirm, gallery-picker, thumb, file-uploader | `admin.micro-apps.show`, `admin.micro-apps.update`, `admin.micro-apps.images.reorder`, `admin.micro-apps.images.delete` | — | edit micro_apps\|admin | desktop-only-notice `/m/not-on-phone?to=/micro-apps/{micro_app}/edit` |
| `/admin/providers` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.providers.index` | — | view providers\|admin | read-mostly `/m/providers` |
| `/admin/unlock-gateway/credit-points` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | manual credit form panel (money-like ledger) | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, money-input | `admin.unlock-gateway.transactions.index`, `admin.unlock-points.store` | — | manage unlock_gateway\|admin | read-mostly `/m/unlock-gateway/credit-points` |
| `/admin/unlock-gateway/overrides` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | apply-override form panel | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.unlock-gateway.overrides.index`, `admin.unlock-override.set` | — | manage unlock_gateway\|admin | read-mostly `/m/unlock-gateway/overrides` |
| `/admin/unlock-gateway/points-settings` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | — | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm | `admin.unlock-gateway.points-settings.show`, `admin.unlock-gateway.points-settings.update` | — | manage unlock_gateway\|admin | read-mostly `/m/unlock-gateway/points-settings` |
| `/admin/unlock-gateway/retailer/{retailer}/statement` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | statement header totals over ledger table | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.unlock-gateway.retailer-statement` | — | manage unlock_gateway\|admin | read-mostly `/m/unlock-gateway/retailer/{retailer}/statement` |

### wechat (12)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/wechat/contacts` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm | `admin.wechat.contacts.index`, `admin.wechat.contacts.restore`, `admin.wechat.contacts.destroy` | — | view wechat_messages\|admin | read-mostly `/m/wechat/contacts` |
| `/admin/wechat/contacts/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.wechat.contacts.store` | — | create wechat_messages\|admin | desktop-only-notice `/m/not-on-phone?to=/wechat/contacts/create` |
| `/admin/wechat/contacts/{wechatContact}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | — | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.wechat.contacts.show`, `admin.wechat.contacts.update` | — | edit wechat_messages\|admin | desktop-only-notice `/m/not-on-phone?to=/wechat/contacts/{wechatContact}/edit` |
| `/admin/wechat/event-bindings` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M04, confirm | `admin.wechat.event-bindings.index`, `admin.wechat.event-bindings.restore`, `admin.wechat.event-bindings.destroy` | — | view wechat_messages\|admin | read-mostly `/m/wechat/event-bindings` |
| `/admin/wechat/event-bindings/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | preview modal of unsaved template; ported (T001 Q12) | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.wechat.event-bindings.events`, `admin.wechat.event-bindings.preview`, `admin.wechat.event-bindings.store` | — | create wechat_messages\|admin | desktop-only-notice `/m/not-on-phone?to=/wechat/event-bindings/create` |
| `/admin/wechat/event-bindings/{wechatEventBinding}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | preview modal of unsaved template; ported (T001 Q12) | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M04 | `admin.wechat.event-bindings.show`, `admin.wechat.event-bindings.events`, `admin.wechat.event-bindings.preview`, `admin.wechat.event-bindings.update` | — | edit wechat_messages\|admin | desktop-only-notice `/m/not-on-phone?to=/wechat/event-bindings/{wechatEventBinding}/edit` |
| `/admin/wechat/messages` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | Message Center kill switch; pause/resume per row | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, switch | `admin.wechat.messages.index`, `admin.wechat.kill-switch.update`, `admin.wechat.messages.toggle`, `admin.wechat.messages.restore`, `admin.wechat.messages.destroy` | — | view wechat_messages\|admin | read-mostly `/m/wechat/messages` |
| `/admin/wechat/messages/create` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | cron builder | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M12 | `admin.wechat.contacts.index`, `admin.wechat.messages.store` | — | create wechat_messages\|admin | desktop-only-notice `/m/not-on-phone?to=/wechat/messages/create` |
| `/admin/wechat/messages/sends-history` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | retry failed send per row | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, M01 | `admin.wechat.messages.sends-history`, `admin.wechat.sends.retry` | — | view wechat_messages\|admin | read-mostly `/m/wechat/messages/sends-history` |
| `/admin/wechat/messages/{wechatMessage}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | cron builder; preview / send-now / send-test panel; last 10 sends | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states, M12 | `admin.wechat.messages.show`, `admin.wechat.messages.update`, `admin.wechat.messages.preview`, `admin.wechat.messages.send-now`, `admin.wechat.messages.preview-sample`, `admin.wechat.messages.send-test`, `admin.wechat.sends.retry` | — | edit wechat_messages\|admin | desktop-only-notice `/m/not-on-phone?to=/wechat/messages/{wechatMessage}/edit` |
| `/admin/wechat/sends-history` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | retry failed send per row | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet, confirm, date | `admin.wechat.sends.index`, `admin.wechat.sends.retry` | — | view wechat_messages\|admin | read-mostly `/m/wechat/sends-history` |
| `/admin/wechat/settings` | A09 | A09 hero /admin/settings · phase-2/archetypes/shots/A09.png | — | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, M04 | `admin.wechat.settings.verdict-labels.index`, `admin.wechat.settings.verdict-labels.update` | — | view wechat_messages\|admin | read-mostly `/m/wechat/settings` |

### ai (2)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/ai/system-messages` | A01·a | A01 hero /admin/orders · phase-2/archetypes/shots/A01a.png | — | page-header, data-table, filter-bar, tabs, status-chip, column-types, row-actions, sticky-header, density, table-states, pagination, saved-views, sheet | `admin.ai.system-messages.index` | — | view ai\|admin | read-mostly `/m/ai/system-messages` |
| `/admin/ai/system-messages/{id}/edit` | A03·a | A03 hero /admin/designs/{design}/edit · phase-2/archetypes/shots/A03a.png | prompt test panel (paid OpenRouter call); model picker | form-section, step-rail, field, input, select, combobox, switch, textarea, save-bar, unsaved-guard, error-states | `admin.ai.system-messages.show`, `admin.ai.system-messages.update`, `admin.ai.models`, `admin.ai.system-messages.test` | — | view ai\|admin | desktop-only-notice `/m/not-on-phone?to=/ai/system-messages/{id}/edit` |

### settings (1)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/settings` | A09 | self: A09 hero · phase-2/archetypes/shots/A09.png | tabs incl FX rates (money path, preview impact); header-ID chips; sortable message templates | settings-subnav, form-section, field, input, switch, select, tag-input, save-bar, unsaved-guard, confirm, M14, M04, M01 | `admin.settings.index`, `admin.fx-rates.index`, `admin.settings.update`, `admin.fx-rates.save`, `admin.fx-rates.preview`, `admin.fx-rates.fetch` | — | settings | read-mostly `/m/settings` |

### dashboard (1)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/dashboard` | A05 | self: A05 hero · phase-2/archetypes/shots/A05.png | homepage: factory countdown strip, quick order search | kpi-tile, data-table, chart-frame, M08 | `admin.dashboard.index`, `admin.dashboard.quick-search`, `admin.fabric-overdue-alerts.resolve` | PR-005, PR-061 | admin | dedicated `/m/dashboard` |

### print-studio (2)

| page | arch·layout | hero | overrides | components | API ops | needs-backend | perm | phone |
|---|---|---|---|---|---|---|---|---|
| `/admin/print-studio` | A10 | A10 hero /admin/email-templates/{templateKey}/edit · phase-2/archetypes/shots/A10.png | light touch: shell entry = template gallery + print-job states only | field, segmented, badge, timeline, M05, save-bar, unsaved-guard, M04, confirm, M01, switch, gallery-picker, thumb | `admin.print-studio.templates.index`, `admin.print-studio.jobs.index`, `admin.print-studio.templates.duplicate`, `admin.print-studio.templates.destroy`, `admin.print-studio.templates.restore`, `admin.print-studio.templates.show`, `admin.print-studio.templates.update` | — | use print studio | read-mostly `/m/print-studio` |
| `/admin/print-studio/designer` | A10 | A10 hero /admin/email-templates/{templateKey}/edit · phase-2/archetypes/shots/A10.png | light touch: canvas keeps existing designer; design shell chrome + save/print job states only | field, segmented, badge, timeline, M05, save-bar, unsaved-guard, M11, M04, M01, combobox | `admin.print-studio.templates.show`, `admin.accessory-codes.kanban-print`, `admin.print-studio.templates.store`, `admin.print-studio.templates.update`, `admin.print-studio.templates.index`, `admin.print-studio.print`, `admin.print-studio.jobs.status` | — | use print studio | read-mostly `/m/print-studio/designer` |

## Retired (not designed)

- `/admin/v1/gantt` (wave 1, orders): retired (founder 2026-10-09 answer 3, TD-1211); would have been the only gantt page; fragments disagreed on archetype, set null
- `/admin/v1/orders` (wave 1, orders): retired (founder 2026-10-09 answer 3, TD-1211); superseded orders index; fragments disagreed on archetype, set null

## Phase-0 corrections

The 49 phase-0 archetype corrections stay in `page-map.seed.json` (`status: corrected`, `from`, `reason`); the pre-phase-3 table is kept at `phase-3/waves/PAGE-MAP.pre-phase3.snapshot.md`.

