# Design-System Audit — scanner-desktop-layout **Role:** `role-design-system-auditor` **Surface:** `convoy/scanner-desktop-layout` workstation UI (`git diff origin/main` + untracked scanner components) **Convoy:** `.convoys/scanner-desktop-layout.md` **Multitask group:** `audit-scanner-desktop-layout-local` **Date:** 2026-08-15 **Scope:** UI / DS only — read-only; no code changes **Inputs reviewed** | Source | Notes | | --- | --- | | Diff UI (vs `origin/main`) | `pages/scanner.js`, `components/scanner/ScannerCamera.js` (+ unrelated dashboard/Layout noise in same branch tip — **out of audit scope**) | | Untracked (convoy) | `ScannerTips.js`, `ScannerResultPanel.js`, `ScannerHistoryStrip.js` + component tests | | Direction lock | `design_direction` v1 + `## Design direction` + `## UX` | | 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**; report follows prior Liquid Glass audit shape + role file | --- ## Audit summary | Check | Status | Notes | | --- | --- | --- | | Direction lock (md+ workstation grid) | ✅ Strong | Framed camera + desk bar + inspector rail + history strip + Tips Modal; mobile immersive left alone | | Hex in JSX (new convoy files) | ❌ | `#ffffff` on Queue/Duplicates badge in `ScannerHistoryStrip.js` | | VOCAB / stale strings | ✅ | `VOCAB.ADD_TO_*` / `MY_COLLECTION`; no Wishlist / Mark Owned / All My Cards | | `backdrop-filter` on strip chips | ✅ | Chips solid `--bg-secondary`; container is `GlassSurface tint="mid"` | | GlassSurface / Button / Modal reuse | ✅ High | Tips=`Modal`; inspector/strip/desk/camera frame=`GlassSurface`; primary CTAs=`Button` | | Custom modal scrim | ✅ | Tips + leave + list picker use `` only | | Sev ≥ 3 findings | **1** | Hex literal on tab badges | --- ## Maturity scoring (repo DS + this surface) Scores 0–4. Evidence cites paths/counts. | Axis | Score | Evidence | | --- | --- | --- | | **Tokens (T)** | **3** | Workstation surfaces consume `--glass-surface-*` via `GlassSurface`, `--text-*`, `--accent-ember` / `--accent-flame`, `--ember-rim-*`, `--border`. Residual: on-accent text still `#ffffff` in new strip badges (and pre-existing `Button.js` primary/danger). No `--text-on-accent` alias in `globals.css`. | | **Components (C)** | **3** | Kit: GlassSurface, Modal, Button, Input, SearchBar, StatCard. New surfaces compose GlassSurface + Button + Modal. Gaps: no Switch / TabList primitive — Auto-detect + Foil switches and strip tabs are raw `