# Design-System Audit — scanner-mobile-checkout **Role:** `role-design-system-auditor` **Surface:** uncommitted `feat/scanner-mobile-checkout` UI (`git diff origin/main` + untracked scanner UI) **Convoy:** `.convoys/scanner-mobile-checkout.md` **Date:** 2026-08-14 **Scope:** UI / DS only — read-only; no code changes **Inputs reviewed** | Source | Notes | | --- | --- | | Diff UI | `Layout.js`, `ScannerCamera.js`, `ScannerCountPill.js`, `ScannerToast.js`, `ReviewCardItem.js`, `ScannerReview.js`, `pages/scanner.js` | | Untracked | `ScannerCheckoutSheet.js`, `ScannerScanPeek.js` | | Direction lock | `design_direction` v1 + `## Design direction` in convoy | | Tokens | `docs/DESIGN_TOKENS.md`, `styles/globals.css` | | Primitives | `components/ui/{GlassSurface,Button,Modal,Input}.js` | | Skill | `.cursor/skills/design-systems/SKILL.md` **not installed** in this repo; audit follows role file + prior Liquid Glass audit shape + `docs/DESIGN_TOKENS.md` | --- ## Audit summary | Check | Status | Notes | | --- | --- | --- | | Direction lock (Liquid Glass + immersive camera + sheet) | ⚠️ Partial | Chrome bars + VOCAB CTAs + Modal reuse land; **L-brackets / scan-line missing**; sheet tint recipe drifts | | Hex in JSX | ❌ | 1 literal `#ffffff` in `ReviewCardItem.js` | | Binder / stale vocab | ✅ | No `binder` / `Mark Owned` / `Save to binder` in scoped UI | | `backdrop-filter` on cart **thumbnails** | ✅ | Thumbs are solid image/`--bg-tertiary`; no filter on `` | | GlassSurface / Button / Modal reuse | ⚠️ Mixed | Camera chrome + peek: GlassSurface; checkout sheet/toast/rows: `glass-panel*` / hand-rolled | | Sev ≥ 3 findings | **2** | Hex literal; missing bracket + scan-line direction lock | --- ## Maturity scoring (repo DS + this surface) Scores 0–4. Evidence cites paths/counts. | Axis | Score | Evidence | | --- | --- | --- | | **Tokens (T)** | **3** | Documented 3-tier glass surface / blur / rim / elevation / scrim in `docs/DESIGN_TOKENS.md` + `styles/globals.css`. Diff mostly consumes `var(--*)`. Residual: `.glass-panel` still hardcodes `blur(12px) saturate(180%)` (not `--glass-blur-*` / `--glass-saturate`); toast uses literal `blur(12px)`. | | **Components (C)** | **3** | Kit under `components/ui/`: GlassSurface, Modal, Button, Input, SearchBar, StatCard (+ chrome). Scanner adopts GlassSurface on camera bars/icons/peek (9 call sites in `ScannerCamera.js`); Modal×2 + Button in `pages/scanner.js` / checkout footer. Gaps: toast + sheet panel + cart rows skip GlassSurface. | | **Patterns (P)** | **2** | Locked pattern “immersive camera + bottom-sheet checkout” partially shipped (immersive Layout, sheet shell mirroring Disambiguation, peek non-interactive). **Detection chrome still filled rectangles** (info/success), not ember L-brackets + scan-line. Confidence mid-band maps to gold, not direction’s amber/ember table. | | **Governance (G)** | **3** | Convoy `design_direction` locked 2026-08-14; `ui-and-theming.mdc` + vocab CI; `forbidden-hex-in-jsx` / forbidden stale strings. No design-systems skill package in-repo (template path missing). | | **Adoption (A)** | **2** | This surface: GlassSurface on live chrome/peek ✅; checkout sheet + toast + rows use utility classes / ad-hoc styles ❌; Review N pill is raw `