diff --git a/specs/design-reference/HANDOFF.md b/specs/design-reference/HANDOFF.md
index 3714437..4802cd4 100644
--- a/specs/design-reference/HANDOFF.md
+++ b/specs/design-reference/HANDOFF.md
@@ -1,5 +1,11 @@
# VYNDR VISUAL SYSTEM — CODE HANDOFF
+## SESSION 3 (Jul 22) — Scanner surfaces S6 + S7
+`Vyndr Scanner States.dc.html` — spec for the two scanner states Code flagged missing (converges at the scanner-nudge build order).
+- **S6 scan empty (marketless scan)**: read-card frame, ZERO market numbers (no empty triplet frame — it doesn't render), chip `NO MARKET` in the blue boundary channel (`rgba(106,147,200,.12)` bg / `.34` border / text `#8FB2DE` — same tokens as PRICED OUT), dashed blue void box (refusal frame shape, blue not red: nothing failed), copy "no live market for this line" (never "coming soon"). Path forward built in: green primary CTA to tonight's board with live priced-prop count; player-specific path (`HERBERT · 3 PRICED PROPS ▸`) leads when the player is on the slate. Mobile 390: both paths 44px.
+- **S7 priced-line display (the nudge)**: strip under the scan field showing ONLY genuinely-priced lines per exact player+stat. Case A `NONE PRICED` is the DEFAULT/common case — quiet dashed blue box + "we price these for [player]" stat chips (with amber fair previews). Case B priced: 44px rows `o 27.5 · BOOK −114 · ◆ FAIR −105 · OPEN READ ▸`, one tap to the real triplet. Case C off-slate: text-tokens-only fact line, no blue, no chips, stops. Typed-line mismatch: query text preserved, `o 30.5 ISN'T PRICED` blue fact line (not an error), nearest priced line = same player+stat only.
+- New color law: **blue #8FB2DE = the boundary channel** — the system being honest about what it can't hand you (edge priced out, no market, line not priced). Distinct from red REFUSAL (model decision) and amber QUARANTINE (model leg suppressed).
+
## SESSION 2 (Jul 17) — Offseason & Intelligence expansion
Two new design files, same package format. System law unchanged (tokens, grade colors, glow-A-only, THE VERB IS "READ").
diff --git a/specs/design-reference/Vyndr Scanner States.dc.html b/specs/design-reference/Vyndr Scanner States.dc.html
new file mode 100644
index 0000000..4bf8e00
--- /dev/null
+++ b/specs/design-reference/Vyndr Scanner States.dc.html
@@ -0,0 +1,305 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ THE WIRE
+
+ --:--:--
+ Scanner spec open — honest absence is a designed state, not a bug.
+ LOG ▸
+
+
+
+
+
+
VYNDR · SCANNER SURFACES · S6 + S7
+
Honest absence, designed.▌
+
Two scanner states flagged missing from the bundle. S6 — the marketless scan: what a read card renders when the board never priced that line. S7 — the priced-line display: the scanner surfaces the board's real lines so nobody free-types a line that doesn't exist. Both extend the boundary channel: blue is the system being honest about what it can't hand you.
+
NO FABRICATED MARKETS · ABSENCE IS THE DEFAULT CASE · EVERY DEAD END POINTS SOMEWHERE REAL
+
+
+
+
+ S6
+
SCAN EMPTY STATE · MARKETLESS
The user scanned a prop the board never priced. No market numbers render — there is no market. The card says so plainly, then hands the user tonight's real board. Help, never a wall.
+
+
+
+
+
+
+
+
+
+ ANATOMY
+ READ-CARD FRAME · ZERO MARKET NUMBERS · PATH FORWARD BUILT IN
+
+
+
+
Herbert o 287.5 Pass Yds
LAC · SCANNED · JUL 22, 2026
+ NO MARKET
+
+
+
+
NO LIVE MARKET FOR THIS LINE
+
No book prices this exact line right now — so there's no vig to strip and no fair number to show. We won't invent a market that isn't there.
+
NO BOOK · NO FAIR · NO MODEL · NOTHING FABRICATED
+
+
+
+
WHAT WE PRICE NOW142 PROPS LIVE
+
+ TONIGHT'S BOARD ▸
+ Herbert has 3 priced props on tonight's board — full triplets on each.
+
+
+
+
CHIP · BLUE BOUNDARY CHANNEL rgba(106,147,200,.12) / BORDER .34 / TEXT #8FB2DE — SAME TOKENS AS PRICED-OUT · DASHED VOID BOX BORROWS THE REFUSAL FRAME BUT BLUE, NOT RED: NOTHING FAILED, THE MARKET JUST ISN'T THERE · GREEN RESERVED FOR THE ONE REAL PATH FORWARD (PRIMARY CTA LAW)
+
+
+
+
+
+
STATE LAWS
+
+
01
Zero market numbers. No book, no fair, no model, no gauge at 0. An empty triplet frame is a lie — the frame doesn't render.
+
02
True copy only. "No live market for this line" — never "coming soon", never "check back". We don't promise markets we don't control.
+
03
Always a path forward. The card ends at tonight's board — with the live priced-prop count and, when the player is on the slate, their real priced props. A scan never dead-ends.
+
04
Help framing. "What we price now" — the product showing its inventory, never apologizing for what a book didn't post.
+
+
+
+
NOT THE SAME STATE AS
+
+
REFUSALMarket exists, our inputs are too thin to grade. Red — a model decision.
+
QUARANTINEMarket exists, model leg suppressed. Amber — book & fair still stand.
+
NO MARKETNo market exists at all. Blue boundary — nothing to price, nothing failed.
+
+
+
+
+
+
+
+
MOBILE · 390 · SAME ANATOMY, 44PX PATHS
+
+
Herbert o 287.5 Pass Yds
NO MARKET
+
+
NO LIVE MARKET FOR THIS LINE
+
No book prices this line right now. We won't invent one.
+
+ HERBERT · 3 PRICED PROPS ▸
+ TONIGHT'S BOARD · 142 LIVE ▸
+
+
BOTH PATHS 44PX · PLAYER-SPECIFIC PATH LEADS WHEN THE PLAYER IS ON THE SLATE, BOARD PATH OTHERWISE PROMOTES TO GREEN
+
+
+
+
+
+ S7
+
SCANNER PRICED-LINE DISPLAY · THE NUDGE
As the user picks player + stat, the scanner shows the board's real priced lines — one tap to a real triplet instead of free-typing a line that isn't priced. Only genuinely-priced lines render. "None priced" is the common case and the default design, not an edge.
+
+
+
+
+
+
+ THE STRIP · THREE CASES
+ CASE A IS THE DEFAULT — MOST PLAYER+STAT PICKS HAVE NO PRICED LINE
+
+
+
+
+
+
A · NONE PRICEDDEFAULT · COMMON CASE
+
+
Herbert·COMPLETIONS
+
+
NO PRICED LINE FOR THIS STAT
+
The board doesn't price Herbert completions tonight.
+
+
WE PRICE THESE FOR HERBERT
+
+ PASS YDS o 275.5
+ PASS TD o 1.5
+ INT o 0.5
+
+
+
Quiet, structured, never alarmed — the strip keeps its shape and offers the player's real priced stats as the way through. This state must look intentional at scale: it's most of the traffic.
+
+
+
+
+
B · PRICED — ONE TAP TO THE TRIPLET
+
+
Jokić·POINTS
+
WE PRICE THESE LINES
+
+ o 27.5
+ BK −114
+ ◆ −105
+ ▸
+
+
+ u 27.5
+ BK −106
+ ◆ −115
+ ▸
+
+
+
Only lines the board genuinely prices — per exact player + stat. Each row is a 44px tap straight into the real triplet. Fair previews amber; green edges only when the read behind it is takeable.
+
+
+
+
+
C · OFF-SLATE PLAYER
+
+
Skenes·STRIKEOUTS
+
+
NOT ON TONIGHT'S SLATE
+
No game, no markets, no prices to show.
+
+
+
Nothing renders — no chips, no suggestions, no dashed frame. Off-slate is quieter than case A: the strip states the fact in text tokens only and stops. No blue; there's no boundary to mark, just no game.
+
+
+
+
+
+ IN CONTEXT · TYPED LINE ≠ PRICED LINE
+ THE NUDGE — REDIRECT TO THE REAL LINE, NEVER PRETEND THE TYPED ONE EXISTS
+
+
+
+
+
+
+ jokic o 30.5 pts
+
+
+
⊘o 30.5 ISN'T PRICEDNEAREST PRICED LINE ↓
+
+ o 27.5 PTS
+ BOOK −114
+ ◆ FAIR −105
+ OPEN READ ▸
+
+
The typed line stays visible in the query — the strip never rewrites the user's intent, it shows what's actually priced next to it.
+
+
+
"ISN'T PRICED" IS A FACT LINE, NOT AN ERROR — BLUE TEXT, NO RED, NO SHAKE · NEAREST LINE = SAME PLAYER + STAT ONLY, NEVER A DIFFERENT STAT PASSED OFF AS CLOSE
+
+
+
+
+
MOBILE · 390 · STRIP UNDER THE SCAN FIELD
+
+
+
+ herbert comp
+
+
+
+
NO PRICED LINE FOR THIS STAT
+
+
WE PRICE THESE FOR HERBERT
+
+ PASS YDS o 275.5◆ −108
+ PASS TD o 1.5◆ +102
+
+
+
+
ALL SUGGESTION ROWS 44PX · FAIR PREVIEW RIDES EVERY SUGGESTED STAT — THE FREE HOOK WORKS EVEN IN THE EMPTY STATE
+
+
+
+
+ THE SCANNER NEVER IMPLIES A LINE EXISTS WHERE IT DOESN'T
+ ABSENCE IS THE DEFAULT DESIGN · EVERY EMPTY POINTS TO A REAL PRICED PROP · BLUE = THE HONEST BOUNDARY
+