# Now, pass 7: final polish, then freeze

*W-design-pass7-now-polish, Opus 5.5, 2026-09-27 20:16 to 20:25 Beirut. Brief: `briefs/W-design-pass7-now-polish.md`. Built on copies of the pass 6 files. `now.html` changed; `situation.html` changed by the footer line only (d). Design choices and the five example series are grade C. SPRING prices are grade A, SPRING market cap is grade B (1B supply assumed). Verification numbers are grade A, from our own script output. Re-run: `NODE_PATH=/home/botbox/node_modules node scripts/shots.cjs` (writes `scripts/verify-output.txt` and `shots/`).*

**Look first:** `shots/now-desktop.jpg`, `now-desktop-1657.jpg`, `now-desktop-hover.jpg`, `now-phone.jpg`, `now-phone-1657.jpg`, `now-phone-why.jpg`.

## (a) What changed against pass 6

All three blocks are built and verified. Nothing was cut.

**A1 Percentage names its basis.** Scale line is `MC ~$2.66M · +87% since seen` (live), `MC ~$1.68M · +18% since seen` (16:57Z), `MC ~$1.42M` (16:32Z, one read), `MC not read` (no read; code path only, no row hits it). The figure is in ink; `since seen` is in secondary ink (`--n`). Hover title on the change: `Price change since first seen on our tape, 16:32Z`.
**A2 Estimate marked where shown.** Each row has a `supplyRead` flag, false on all six today; when false the market cap gets a `~` and the hover title `Market cap at the last read, 17:27Z. ~ means estimated: supply assumed at 1B, not read yet`. When true the tilde and the second sentence drop. Legend first line: `price line, scaled within each row · ~ market cap is estimated, supply assumed · % is since first seen on our tape`. About: the market cap bullet is one sentence (`~ marks an estimated market cap: ...`), and the scale bullet explains "since seen". Phone: `MC` label hidden (`.mck`), `~$2.66M · +87% since seen` right of the symbol. `fitName()` hides the name first; if the symbol still does not fit beside the scale string, the tile gets `.scw` and the string moves whole to its own line under the identity line (grid `id / sc / sub`). At 390 the scale string fits on the symbol line on every card at every moment, but the two example names do not fit beside it, so they are hidden on the phone (they show on desktop). That follows the brief's order (the name gives way first).
**A3 For you says which reference.** `3 material since look` + small `16:57Z`; `In · 2 material since entry` + `17:11Z` + `3 since look` (second small line, only when the look is at or before the moment); `New to you`; `No material change` + `since look 16:57Z`; `Before your look` + `looked 16:57Z`. Hrefs and chalk marks unchanged.
**A4 Why here on touch.** The state pill carries `aria-expanded` (false/true) and `aria-controls="wh<TOK>"`. Tap toggles it, a tap outside closes it, and so does Escape. On open, `placeWhy()` measures the popover: it shifts horizontally to stay 8 px inside the viewport, and flips above the pill (`.up`) if it would leave the bottom (it stays below if flipping would leave the top). It runs at every width; it matters at 820 and under. No sheet, no new control.

**B1** `Market time` caption (11 px, 500, `--u`, letter-spaced .08em, sentence case) above the moment value. It appears once in the page text. **B2** Rail head 16 to 20 px diameter. A 2 px ice ring (`rgba(114,195,230,.55)`, r 12) shows on hover, on focus-visible and while dragging. Cursor is `grab` at rest and `grabbing` while dragging (`.rail.drag`). Tick labels are at .8, the covered segment at .75. `Back to live` gets the play button's fill (ice .12), border (ice .35) and weight 500, and is still hidden at live. Landmarks, `PAD`, x mapping and `stripX` are unchanged.

**C1** Footers: `Caverio · Now, 14 Sep 2026, held at 17:27Z` and `Caverio · SPRING at 17:27Z, 14 Sep 2026`. **C2** State pill: transparent `::after` 4 px above and below, so the hit area is 32 to 33 px against a 26 px visual. For you link: `inline-block`, padding 7 px, margin -7 px, so the hit area is 35 px against an 18 px visual. **C3** `.st`, `.btn` and `.play` get the rail's focus-visible ring (2 px ice .55, offset 3). `#mT` and `#hCount` have `aria-live="polite"`. **C4** Copy link confirms `Copied · 16:57Z` for 1 s when rewound, and `Copied` at live.

**Layout side effect (C, design choice).** The longer strings did not fit the pass 6 desktop columns: AGRIPPA's `MC ~$3.38M · +445% since seen` is 193 px against a 184 px Token column, and `In · 2 material since entry` wrapped at 156 px. So `--cols` is now `196px 164px 1fr 306px 180px` and the column gap drops from 20 to 16 px. What is happening goes from 288 to 268 px, and two sentences at live take 3 lines instead of 2. Rail and strips still share one column, so `stripX` is identical everywhere (880 at 1280, 195 at 390). The For you small line is `white-space:nowrap` on the headline.

## (b) Frozen Now specification

**Page.** Nav `Now · Board · Market`. Head `Now` + `N situations surfaced · Live 17:27Z` / `· Now at HH:MMZ`. Clock block: Play, `Market time` over the moment value (`Live · 17:27Z` / `Now at HH:MMZ` + `Historical`), `Back to live` (rewound only), `Copy link`, then the rail over the strip column. Then the row head, a finite list, the end line `No other situations meet the surfacing rules at HH:MMZ.`, the legend and About this data. Footer `Caverio · Now, 14 Sep 2026, held at 17:27Z`. Geist throughout with tabular figures; no mono on Now (the address lives on Situation). Palette: ground `#0A0D10`, surfaces `#10151A/#161C22/#1C232B`, ink `#E6EAED` (secondary .74, unread .60), ice `#72C3E6`, orange `#C8742E`, crimson `#D6336C` (+ `#EB7AA2` pill text only), you `#E9E3A4`. No green or red.

**Row, desktop (1280)**, grid `196 | 164 | 1fr | 306 | 180`:
1. **Token**: symbol 20/600 (largest text in the row, first text node), name 13 px when it differs, caption `<chain> · tracked <age at m>`, `Following`, scale line `MC ~$X · ±N% since seen`. Hover actions `Open Situation`, `Copy address` (linked rows only).
2. **State**: 13 px pill button (Why here popover) + descriptor (`· wallet-led` / `· attention-led` on Developing).
3. **What is happening**: sentence 14 px, then `Latest: <event> · HH:MMZ`.
4. **Situation · 60 min**: the Mini Clock (58 px) + readout `<price> · <entered> · <profiled> · <attention> · <holders> · <safety>`.
5. **For you**: headline in you-yellow (linked when there is a comparison), small lines under it.

**Row, phone (390): six elements**: (1) identity line: symbol and name left, `~$X · ±N% since seen` right (moves whole to its own line if it cannot fit; never wraps mid-string), caption line under; (2) state pill + descriptor, tap for Why here; (3) sentence; (4) Latest; (5) strip + readout; (6) For you on one line.

**String patterns, all `last(m)`** (the last read at or before the moment; no interpolation, no future value):
- Scale: market cap = last price read × 1B, `~` while `supplyRead` is false. Format `$2.66M` (≥1M), `$627K` (≥100K), `$61.8K`. Change = last read against the first read on our tape, ever (`firstSeenAt`; the baseline survives when that read scrolls out of the window; amended 23:50 per the v3.2 definition), rounded %, sign carries direction. One read: no change. No read: `MC not read`.
- Readout price: 3 significant figures (`$0.00266`), `price not read` when none.
- State: the state at m. Sentence and Why here: the wording true at m. Latest: the newest event at or before m that changed the row's wording.
- For you: entry at or before m wins (`In · N material since entry` / `HH:MMZ` / `N since look`), else never viewed `New to you`, else m before the look `Before your look` / `looked HH:MMZ`, else `N material since look` / `HH:MMZ`, or `No material change` / `since look HH:MMZ`. Link `situation.html?a=<look or entry>&t=<m>`.
- Every Situation link carries `?t=<m>` when rewound.

**States and colours.** Money first and Crowd arriving: ice text on ice .10, border .30. Early money leaving: orange text, border only. Safety changed: `#EB7AA2` on crimson .12, border .55, crimson diamond dot, and a crimson inset rule on the row. Developing: secondary ink, hollow dot, faint border.

**Order buckets.** 1: safety change in the last 60 min. 2: past Developing with a material event in the last 30 min. 3: other rows past Developing. 4: Developing. Newest Latest first inside a bucket. No score is kept or shown. While the pointer or focus is in the list during playback, order and additions hold, values update in place, and a pill offers `N new situations surfaced` / `Order changed`.

**Mini Clock glyphs** (layer order bottom to top: hatch, baseline, bars, price line, event glyphs, look/entry, moment line):

| Glyph | Meaning | Colour |
|---|---|---|
| thin line, dot per read, above the baseline | price, reads at or before m, scaled within the row | ice 1.5 px |
| bars on the baseline | wallets entering a minute, completed intervals, scaled within the row | ice 55% |
| ring with a dot, on the line | profiled or watched participant entered | ice |
| hollow ring above, dotted stem | public attention: call or mention | ink |
| tick below the line (wider = burst) | holders weakening | orange |
| tall diamond | safety change | crimson |
| flag below the line / small diamond | your look / your entry | you-yellow |
| hatch | not on our tape yet | ink .22 |
| clean baseline | watched, nothing seen | ink .24 |
| solid line at m (historical) / dashed ice (live) | the moment | ink .75 / ice .45 |

**Rail.** One x mapping shared with every strip (`PAD` 6, 16:27Z to 17:27Z). Track ink .16, covered ice .75, ticks every 15 min at .8. Landmarks only at or before m: surfaced (ice dot), state change (ice tick), safety (crimson diamond). Head 20 px ink, ice ring on hover, focus and drag, `grab`/`grabbing`. Keys: arrows ±1, PageUp/PageDown ±5, Home/End. Play is 8 s for the hour (reduced motion: 1 min steps). The URL carries `?t=` when rewound.

**Historical rule.** At m the list is rebuilt from what was known at m: rows that had not surfaced are absent, and every sentence, number, glyph, landmark and tooltip comes from reads at or before m. Nothing after m leaks: the 16:57Z page has no `2.66`, `876`, `17:08` or `17:19`.

## (c) Verification (20:22 Beirut; full output in `scripts/verify-output.txt`)

```
shots (KB): now-desktop 174, -1657 120, -hover 178, now-phone 150, -1657 95, now-phone-why 150; all under 500, no overflow, Geist, no page errors
identityAt SPRING: 17:27Z {mc:~$2.66M, chg:+87% since seen, price:$0.00266}; 16:57Z {~$1.68M, +18% since seen}; 16:42Z {~$1.06M, -25% since seen}; 16:32Z {~$1.42M, chg ""}; every row's mc starts with ~ at all four
titles: mc "Market cap at the last read, 17:27Z. ~ means estimated: supply assumed at 1B, not read yet"; chg "Price change since first seen on our tape, 16:32Z"
legend first line: "price line, scaled within each row · ~ market cap is estimated, supply assumed · % is since first seen on our tape"
forYou SPRING live "3 material since look | 16:57Z"; 16:57Z "No material change | since look 16:57Z"; 16:42Z "Before your look | looked 16:57Z"; KESTREL "New to you"
  entry stub 17:11Z, live: "In · 2 material since entry | 17:11Z | 3 since look", href situation.html?a=17:11Z&t=17:27Z
touch 390: tap SPRING pill -> open, aria-expanded true, aria-controls whSPRING, popover x 35-335 y 441-514 in 390x844, inside
  tap outside -> closed, aria-expanded false; tap then Escape -> closed, false
  each row's pill tapped 40 px above the viewport bottom: all inside; MARLIN, LUMEN below, AGRIPPA, SPRING, OBOL, KESTREL (last row) flipped above, y 700-773
rail: head diameter 20, cursor grab (grabbing while dragging), "Market time" x1, Back to live hidden at live, visible at 16:57Z with bg ice .12 = play bg; ticks .8, covered .75; aria-live polite on #mT and #hCount
focus-visible by Tab: play, back, copy, rail, row link all solid rgba(114,195,230,.55); .st ring verified in an earlier Tab run
Copy link: 16:57Z "Copied · 16:57Z" then "Copy link" after 1 s; live "Copied"
hit boxes 390: state pill visual 26, hit 32-33 on every row; For you link visual 18, hit 35
phone 390 live, 16:57Z, 16:42Z: scrollWidth 390, six elements every card, scale string 1 line on the symbol line every card
stripX(16:57Z) identical on every row and the rail: 880 at 1280, 195 at 390 (live and 16:57Z); priceLineX at or left everywhere
rendered text (drawers open, titles, tooltips, aria) at live, 16:57Z, 16:42Z, 1280 and 390: no banned or absent string (list below); "example" outside About: 0 at all six
pass 6 list re-run as before: symbol first and largest; order MARLIN > LUMEN > AGRIPPA > SPRING > OBOL > KESTREL; 16:57Z SPRING sentence equals Situation header byte for byte;
  16:57Z text has no 2.66/876/17:08/17:19; SPRING readout "$0.00266 · 939 entered · 1 profiled · none seen · top 20: 0.59 · safety not read";
  D1 freeze pill "3 new situations surfaced" and apply; reduced motion 1.3 s; landmarks only at or before m; ?t= written; rail click/keys
hex in now.html: pass 2 palette + #EB7AA2 only; U+2014 in now.html, situation.html, palette-cvd.txt, shots.cjs, palette_cvd.py: none
```

Banned list checked: `Direction 2`, `Tracks`, `pass `, `fixture`, `prototype`, `illustrative`, `grade `, `playhead`, `worth a look`, `money in`, `Back to now`, bare `N changes`, `ev-`, `rel-`, `R4a`, `provisional`, `illus`, `T5`, `schema`, `derived`, `provider`, `smart money`, `alpha`, `edge`, `buy`, `sell`, `bullish`, `score`. On Situation the only hit is the accepted `contract` use, unchanged from pass 6 (the diff does not touch it).

**Contrast** (WCAG, our computation): `Market time` label 6.06 on `#10151A`. Tilde and figures (ink) 14.19 on the row, 13.10 hovered. `since seen` 8.26 and 7.78. Tick labels 9.96 (was 6.06). `Back to live` text 7.48. Graphics: covered segment 3.74 against the track, head ring 3.63, head 15.17. Pills are unchanged from pass 6 (Safety changed 5.85, Money first/Crowd arriving 7.19, Early money leaving 4.90, Developing 7.84).

**Minor, not fixed:** a Tab run also lands on the SPRING hover actions (`Open Situation`, `Copy address`), which keep the browser's default focus ring. They were out of scope for C3.

## (d) Hashes and the situation.html diff

```
54d7cfc65998ced4c991e3e903ac901d1fdcb04aadedd75571ded77b3467c925  now.html
e637059e9c3334cb4bc16200fc449de191d0625c5cec9fcf6c17c589d81aefad  situation.html
24e11a15dadae2ac2ed6ceb46b9daa0e69e898e0e176cbd9a0ff78e4ccc3ab92  ../../design-pass6-2026-09-27/d2-tracks/situation.html (pass 6)

419c419
< <div class="foot">Caverio · SPRING at 17:27Z, 14 Sep · Direction 2, Tracks</div>
> <div class="foot">Caverio · SPRING at 17:27Z, 14 Sep 2026</div>
```

Status: DONE
