Three independent reviewers scored the chat UI and its live-turn demo against a six-dimension rubric, reviewing the actual source (preview.html, styles.css, main.tsx, HANDOFF.md).
| Dimension | Vesper | Cog | Lumen | Avg |
|---|---|---|---|---|
| Feel & Fidelity ·20% | 9 | 8 | 9 | 8.7 |
| Visual Craft ·20% | 9 | 8 | 9 | 8.7 |
| Interaction & Motion ·20% | 8 | 7 | 8 | 7.7 |
| IA & Clarity ·15% | 8 | 8 | 7 | 7.7 |
| Accessibility & Robustness ·15% | 7 | 7 | 6 | 6.7 |
| Demo Effectiveness ·10% | 9 | 9 | 7 | 8.3 |
| Weighted overall | 8.3 | 7.7 | 7.8 | 7.9 |
.prose at ~64ch), a luminance-only text ramp, and monochrome discipline (color reserved for delete / fail / done).<i onClick> with meaning shown only on hover; carousel slides aren't focusable; no end-state aria-disabled; resizer is pointer-only. (SC 2.1.1 / 1.4.1)setTimeout loop auto-plays/loops regardless of prefers-reduced-motion (the global CSS only freezes CSS animation); no Pause / caption on a landing-facing GIF. (SC 2.2.2)aria-roledescription, aria-current, or live region naming "Artifact N of M."phase; nothing teaches the "state vs activity" contrast..canvas-seg button) and .aw-ver — likely under AA 3:1.Traffic lights → real <button> with aria-label + always-visible affordance + Enter/Space; focusable .cv-flow with arrow-key nav, aria-current on the active slide, and end-state aria-disabled on the arrows; keyboard resize on the splitter.
Gate the JS choreography on prefers-reduced-motion (render the settled final frame instead of looping); add Pause / Replay and a one-line caption.
aria-roledescription="carousel", aria-current on the centered artifact, and a polite live region — "Artifact 3 of 9 — Chat Reference Spec."
Port the preview's single-source setPhase so sidebar STATE and bottom ACTIVITY can't desync; add an aria-description/tooltip clarifying "model state" vs "current activity."
Raise inactive segmented-control glyph + .aw-ver alpha to clear AA 3:1 in both themes.
Wire selVer into verLabel/ArtPreview (version selection is currently inert); align the auto-scroll thresholds (~140px) to kill the button/pin dead-band; ship the demo harness in React for parity.
.canvas-seg glyph contrast and the demo's unconditional loop.demoClear() each loop, re-entry guard.lastSync guard against feedback loops.selVer/verLabel.preview.html — not reproducible from main.tsx as handed off.