# notifications-settings.screen S3 settings category — notification channel × stakes × specialist preferences. Implements per [brief S §S3](./S-settings-ia.brief.md) + [brief C](./C-notifications.brief.md) matrix. Reached from settings-root.screen.md "Notifications" card. Voice: working. ## Layout (full-screen sheet) ``` ┌─────────────────────────────────────────────────┐ │ ◄ Settings Done │ 56pt ├─────────────────────────────────────────────────┤ │ │ │ ─── Channels ─── │ │ ☑ iOS push │ │ ☑ iMessage self-notify │ │ ☑ Email digest │ │ ☐ Apple Watch │ AB only on if Watch paired │ │ │ ─── By stakes ─── │ │ Push iMsg Email Watch │ matrix per brief C │ High ☑ ☑ ☑ ☑ │ │ Med ☑ ☐ ☑ ☐ │ │ Low ☐ ☐ ☑ ☐ │ │ │ │ ─── Quiet hours ─── │ │ From: [ 22:00 ▼ ] To: [ 08:00 ▼ ] │ │ Override for high-stakes: ☑ allow │ │ │ │ ─── Per-specialist ─── │ │ • ai-copilot [ inherits ▼ ] │ │ • triage [ high+med only ▼ ] │ │ • content-x [ inherits ▼ ] │ │ • bookings-tryst [ failure-only ▼ ] │ │ [ See all 11 → ] │ │ │ │ ─── Daily digest ─── │ │ ☑ Show in-app at first chat open │ │ ☑ Send via email at 06:00 local │ │ [ Customize sections → ] │ │ │ └─────────────────────────────────────────────────┘ ``` ## Components | Component | Notes | |---|---| | Channels | 4 channels Quinn can opt into. Watch greyed when no Watch paired. | | Stakes matrix | 3×4 grid: high/med/low × channel. Per brief C default-checked pattern. | | Quiet hours | Time range + high-stakes override flag. | | Per-specialist | Per-specialist preference: inherits / high+med only / failure-only / off. | | Daily digest | In-app daily-digest.screen.md surfacing toggle + email cadence. | ## States 1. **Default** — sensible matrix per brief C. Quiet hours empty (no restriction). 2. **No push permission** — top banner: "Cocotte doesn't have push permission. Grant in iOS Settings." 3. **Watch unpaired** — Watch column greyed. 4. **All channels off** — banner: "Cocotte can't reach you. Approvals will queue in-app only. Enable at least one channel." 5. **Quiet hours covering current time** — banner: "It's quiet hours now. Cocotte's holding notifications." 6. **Per-specialist override active** — chip: "{N} specialists overriding defaults." 7. **VoiceOver** — matrix announced as table; channel columns announced as headers. ## Interactions - **Tap a stakes-matrix cell** → toggle that channel for that stakes tier. - **Tap quiet hours picker** → time range editor. - **Tap per-specialist row** → preference picker for that specialist. - **Tap "Customize sections"** → daily-digest section toggles (which sections appear). - **Tap "See all 11"** → full per-specialist list. ## Edge cases - **High-stakes notification during quiet hours, override off** — Cocotte still sends via iMessage as fallback (per brief M fallback hierarchy). - **Email channel set but Quinn's email unverified** — chip "Email unverified. Add a working address." - **Daily digest off + chat-home open at 06:00** — Cocotte still shows the pinned card (digest section toggle covers the email, not in-app). ## Related - [Brief S §S3](./S-settings-ia.brief.md) — parent. - [Brief C](./C-notifications.brief.md) — channel × stakes matrix design. - [Brief M §M4](./M-error-degraded-modes.brief.md) — fallback hierarchy. - [daily-digest.screen.md](./daily-digest.screen.md) — in-app digest target. - [specialist-drawer.screen.md](./specialist-drawer.screen.md) — per-specialist override entry. ## Out of scope - Per-channel quiet-hours overrides (defer). - Notification-action quick replies (P3+).