Files
ten31-database/design/phase8-conformance.md
T
Keysat 60d67f6b7d docs: add re-anchored Phase 8 visual-conformance spec + record Grant's design calls
design/phase8-conformance.md — per-surface anatomy + deltas + line refs built
against the .dc.html defaults (not the screenshots), as the 8a–8i build reference.
Corrects the screenshot read (drop disposition badges + contact footer; 4-stage
funnel + swipe dirs already correct). Records two Grant decisions (2026-06-19):
Pipeline existing-LP uses the earmark (unify with Grid, overriding the dc star);
Contacts drops the investor/prospect type tabs (prospect type unused) but keeps a
Priority-flag sort. Refresh AGENTS.md Current state; ROADMAP Phase 8 points at the spec.
2026-06-19 20:12:11 -05:00

132 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 8 — mobile visual-conformance build reference
**Status:** scoped 2026-06-19, not started. Working reference for ROADMAP Phase 8 (8a8i). Delete/archive once Phase 8 lands.
**Anchor (read first):** the source of truth is each `*.dc.html` in `design/_imports/2026-06-19_zip-file/Venture-CRM mobile redesign/` **rendered at its DEFAULT `data-props`** — NOT the `screenshots/` PNGs (those are option-history: rejected disposition badges, a 6-stage MEETING/FUNDED funnel, the star-everywhere flag, a contact-footer band). Defaults: all surfaces `theme=dark`; Grid `variant=compact, font=plex, lpFlag=earmark`; Pipeline `mode=swipe`. Spacing/type tokens (card radius 10, gap 10, title 16, body 15, detail title 22) **already match** — the gaps below are **anatomy/structure**, not spacing/theme.
> **Per-surface existing-LP signal:** **Grid = earmark corner-triangle · Pipeline = earmark corner-triangle** (Grant override 2026-06-19 — unify with Grid; the dc default was a ★ star, we don't follow it) **· Contacts = avatar ring**.
> **Contacts sort/tabs (decided, Grant 2026-06-19):** **remove the investor/prospect type tabs** — the `prospect` type isn't used anywhere useful (C2). **Keep a sort — by the Priority flag** — as a deliberate enhancement beyond the dc (which is search-only, no sort).
`*.dc.html:NN` = prototype line; `index.html:NN` = current app line.
---
## Surface 1 — GRID (`GridApp.dc.html`, app `MobileFundraisingGrid`)
**Authoritative card** (`GridApp:84108`): `--panel` bg, 1px `--border`, radius 10, padding 12×14, `--shadow-card`, gap 8.
- **Existing-LP = earmark corner-triangle, top-left** (`:8991`): `border-top:18px solid var(--accent); border-right:18px solid transparent`. At `lpFlag=earmark`, `lpEarmark` true / `lpStar`/`lpBanner` false (`:492494`).
- Row 1 (`:92102`): name 16px/600 left; **Priority** mono-10px pill right, *only if* `c.priority` (radius 4, amber `priBg/priText`). No investor/prospect badge.
- Row 2 (`:103106`): `$amount` mono 15/600 (`amtColor` green if >0 else muted) · **4-stage chip** (mono 11, radius-999 pill; lead/engaged/diligence/commitment colors `:405409`).
- Row 3 (`:107`): recency mono 12 ("2d ago"/"30d stale"; amber ≥10d, red ≥30d, `:421426`).
**List header** (`:6581`): tappable view-name 21/600 + ▾; row 2 = mono count (left) + **SORT pill** (right, mono 11 uppercase, sort-icon + label, `:7275`); then search (44px) + gradient `+`. Sort sheet (`:633`): Name / Pipeline stage / Committed / Last contact / Priority.
**Investor detail** = full-screen (`:177293`): title 22 + Edit; chip row = Priority + **"Existing LP" pill** (`:192194`) + "Last contact …"; **Pipeline stage** card (tappable chip + "Change "); **Contacts** pills + "+ Add"; **Commitments** (read-only + Total); **Reminder** card; **Notes timeline** (dot-and-line, type tag + date + summary, "+ Log").
**Deltas:**
| # | Delta | app | spec | sev |
|---|-------|-----|------|-----|
| G1 | Existing-LP wrong: app uses `border-left:3px` + `★` in detail title → **earmark corner-triangle** on card + **"Existing LP" pill** in detail | `2321`,`9659`,`9754` | `8991`,`192194` | **HIGH** |
| G2 | Priority is a `★` glyph → make it a **"PRIORITY" text pill** (collides with existing-LP star today) | `9662`,`2323` | `99101` | **HIGH** |
| G3 | **No sort control** (only a count) → add SORT pill + sort sheet (5 opts) | `96879689` | `7275`,`633` | **HIGH** |
| G4 | Detail pipeline: "Stage" row + button → single tappable **stage card** (chip inline + "Change ") | `97629773` | `198207` | MED |
| G5 | No dedicated **Reminder card** (reminder is a row in Activity) → dedicated card (note + due / "No reminder", ) | `98029804` | `249262` | MED |
| G6 | Notes = single text blob → **timeline** (dot+line rail, per-entry tag+date+summary) | `9805` | `270289` | MED |
| G7 | Subtitle "$X committed · {lead}" → committed lives in Commitments card; subtitle = priority/LP/last-contact chips | `9757` | `188196` | LOW |
| G8 | Card amount color: verify zero-commit dims to muted (`.zero` token parity) | `9665`,`2330` | `495` | LOW |
**Corrections to prior read:** DROP the left-accent-border (never the default — replace with earmark); the `★` is the rejected `lpFlag=star` option (remove); Priority is a pill not a star; the 4-stage chip is **correct, keep**.
---
## Surface 2 — CONTACTS (`ContactsApp.dc.html`, app `MobileContactsPage`/`MobileContactDetail`)
**Header** (`:5965`): "Contacts" 21/600 + mono count; **search only — no segmented tabs, no sort**. List **always AZ** (sticky mono headers, `:337343`), hard-coded `name.localeCompare` (`:322`).
**Card** (`:7283`): row, panel/border/radius-10, padding 11×13.
- **Avatar** (`:74`): 40px, `--elev`, **two-letter initials** mono 13 accentlight; **existing-LP = ring** `border:1.5px solid var(--accent)` else 1px `--border` (`:329`).
- Name 15/600 (`:76`); below: **org** 13 `--t3` **+ 4-stage pill** mono 9 (`:79`).
- Right: **recency** mono 11 (`:82`, `:272278`).
**Detail = bottom sheet** (`:119179`, *not* full-screen): 52px avatar+initials+ring, name 19 + org; **email-copy pill** ("EMAIL" + mono accent address + copy, `:134140`); **two action buttons** — "Log communication" (gradient, flex 2) + "Email" (flex 1, `:143146`); **Organization card** = earmark + org + stage pill + **Committed / Last-contact** stat pair + last-note tag + **"Open investor in Grid "** (`:149175`).
**Deltas:**
| # | Delta | app | spec | sev |
|---|-------|-----|------|-----|
| C1 | Card has **disposition (investor/prospect) badge** → remove; right-side signal is **4-stage pill (under name) + recency** | `5220`,`52195222` | `79`,`82` | **HIGH** |
| C2 | **Remove the All/Investors/Prospects type tabs** (prospect type unused); **keep a sort — by Priority flag** (enhancement; dc is search-only) — Grant 2026-06-19 | `52405250` | `5965` | **HIGH** |
| C3 | Avatar = one initial, no ring → **two-letter initials + existing-LP ring** (`amt>0`) | `5214`,`22222227`,`5068` | `74`,`329`,`285289` | **HIGH** |
| C4 | Card meta shows raw **date** (`formatDate`) → **recency text** ("2d ago") | `5221` | `82` | MED |
| C5 | Detail = full-screen field-dump → **bottom sheet** (email-copy pill, Log/Email pair, Org card w/ "Open in Grid") | `50755137` | `119175` | **HIGH** |
| C6 | Card sub = org only → org **+ stage pill** same line | `5217` | `7780` | MED |
**Corrections:** DROP the disposition badge (classifying signal is stage-pill + ring); the segmented tabs are an app-only addition, not in the design.
---
## Surface 3 — PIPELINE (`PipelineApp.dc.html`, app `MobilePipeline`)
**Header** (`:5968`): "Pipeline" 21 + mono total + **SORT pill** (Name/Amount/Staleness/Priority, `:6467`,`:422`). **4 stages** lead/engaged/diligence/commitment (`:369370`).
**Swipe mode** (`:71132`): horizontally-scrollable **segmented stage pills** (height 36, radius 999) with mono uppercase label **+ count badge** (`:7679`); full-width **scroll-snap stage columns** (header = stage chip + count + sum; card list); **page dots** (active = 22px bar, `:125132`).
**Card** (`:97117`): panel/radius-10; tappable region + **divider + two move buttons** ( / , disabled at ends, `:112115`).
- Row 1: **existing-LP = earmark corner-triangle** (Grant override 2026-06-19 — dc default was `★` at `:101`; **use the Grid earmark instead** for consistency) + name 16/600; **Priority pill** right (`:104`).
- Row 2: `$amount` mono 15/600 · 3px dot · recency mono 12 (`:106110`).
**Detail = bottom sheet** (`:204272`): name 19 + Priority/Existing-LP pills + last-contact; **Committed / Contacts stat tiles** (`:222231`); **"Move stage" inline radio list** w/ checkmarks (`:233241`); **Notes timeline + "+ Log"** (`:243266`); separate **Log sheet** over it (`:274302`).
**Deltas:**
| # | Delta | app | spec | sev |
|---|-------|-----|------|-----|
| P1 | Segmented control = vertical count-over-label boxes → **horizontal-scroll pills + count badge** | `59455958`,`24002414` | `7382` | MED |
| P2 | Cards lack **existing-LP flag, Priority pill, recency** (app = name + contact·org sub + amount) → **earmark** (Grant override, not ★) + name / Priority pill / amount·dot·recency | `59165933` | `99110` | **HIGH** |
| P3 | **No SORT control** on header | `59355977` | `6467` | MED |
| P4 | Detail = full-screen field-dump → **bottom sheet** (stat tiles + inline move-stage radio list + notes timeline + inline Log) | `59806036` | `204272` | **HIGH** |
| P5 | Stage change = button → sub-sheet → make move-stage list **inline in the sheet** | `60056007`,`60236035` | `233241` | MED |
| P6 | Page total "N deals · $X" → stage-column header = **chip + count + sum** | `59635966` | `8894` | LOW |
**Corrections:** the app's **4-stage funnel is CORRECT** (dc `stages()` resolves to lead/engaged/diligence/commitment; the 6-stage MEETING/FUNDED/OUTREACH in screenshots is stale seed). Don't add a type/disposition badge. **Pipeline existing-LP = earmark corner-triangle** (Grant override 2026-06-19; the dc default was `★`, we don't follow it — reuse the Grid earmark component).
---
## Surface 4 — REMINDERS (`RemindersApp.dc.html`, app `MobileReminders`/`ReminderRow`)
**Header** (`:5662`): "Reminders" 21 + a **mono summary** ("2 overdue · 1 today · 7 open", red when overdue, `:313315`) + gradient `+`. **No Active/Done/All filter** — only a collapsible **Completed** section at list end (`:109130`).
**Buckets** (`:317332`): **4** — Overdue / Today / This week / Later, each header = **colored dot** (red/amber/blue/grey) + mono label + count.
**Row** (`:7594`): swipe wrapper; **right=Snooze** (`:7780`), **left=Complete** (`:8285`), threshold 70 (`:257`). Card (`:8793`): note 15/500; below = org 13 + **due-chip pill** (mono 10, radius 999, urgency bg/text/border, "3d overdue"/"Today"/"in 4d"/"Jun 24", `:91`,`:228240`).
**Completed** (`:109130`): collapsible; done row = filled check circle + strikethrough note + org.
**Deltas:**
| # | Delta | app | spec | sev |
|---|-------|-----|------|-----|
| R1 | Due = plain colored mono text → **urgency-colored chip pill** | `4620`,`2480` | `91` | **HIGH** |
| R2 | Buckets: Overdue/Due-soon/Later → **Overdue / Today / This week / Later** ("Today" its own bucket) | `45574563` | `318`,`235239` | MED |
| R3 | Header = Active/Done/All filter + "+ New" → title + **summary line** + `+` | `47444755`,`4766` | `5662` | **HIGH** |
| R4 | Group headers lack the **colored dot** (7px, red/amber/blue/grey) | `4766`,`24552461` | `6872`,`317` | MED |
| R5 | Completed via filter tabs → **collapsible "Completed" section** at list end (active list is default) | `47484751`,`4764` | `109130` | MED |
| R6 | Swipe left=Done / right=Snooze **matches** — keep (labels cosmetic) | `46074608` | `77,82` | LOW |
| R7 | Edit = bottom sheet — **correct**, keep | `4782` | `159173` | — |
**Corrections:** left=Done/right=Snooze is correct (don't flip); edit-via-sheet is correct.
---
## Phase 8 punch-list (visual/structural only — DB-wiring parity is the separate functional report)
- **8a Grid card (HIGH):** G1 earmark corner-triangle (replace left-border); G2 PRIORITY text pill (replace ★); G8 zero-commit dim token parity.
- **8f Pipeline card (HIGH):** P2 add ★ + Priority pill + recency line; P1 horizontal-scroll pills + count badge; P6 stage-column header chip+count+sum.
- **8b Detail actions/structure (HIGH):** C5+P4 convert Contacts & Pipeline detail full-screen → **bottom sheets** with the dc anatomy; G4/G5/G6 Grid detail → tappable stage card + dedicated Reminder card + notes **timeline**; P5 inline move-stage list.
- **8c Quick-log (MED):** Grid/Pipeline notes post into a **timeline** (tag+date); dc Grid has a **top-bar quick-log pencil** (`GridApp:5355`) the shell lacks → 8i.
- **8d Sort (HIGH/MED):** add SORT pill → sort sheet to Grid (`9687`) + Pipeline (`5935`). **Contacts (Grant decided): remove the investor/prospect type tabs** (`52405250`); **keep a Priority-flag sort** as an enhancement (dc had none).
- **8e Reminders (HIGH):** R1 due-chip pill; R3 header summary line (reconsider Active/Done/All vs dc collapsible Completed, R5); R2/R4 re-bucket Overdue/Today/This-week/Later with colored dots.
- **8i Shell (MED):** Contacts avatars → two-letter initials + existing-LP ring (C3); drop disposition badges (C1) + Contacts tabs (C2); dc top-bar = quick-log pencil + theme + account cluster (every dc `:5058`).
**Severity order (whole phase):** G1, G2, C1, C2, C3, C5, P2, P4, R1, R3 (HIGH) → G3, P3, sort/bucket/dot/chip (MED) → G7, G8, P6, R6 (LOW).
**Theme-var note (DESIGN convention):** every new color (earmark, priority pill, ring, due-chip, segment count-badge) MUST use `:root` theme vars, not literals. Authoritative dark/light pairs: `GridApp.dc.html` `stageColors`/`priColors`/`recency` (`:400442`), `RemindersApp.dc.html` `urgency` (`:228240`).