# Direction 2, Tracks

*W-design-pass2-d2-tracks, Opus 5.5, 2026-09-27 08:51 to 09:05 Beirut. Brief: `briefs/W-design-pass2-d2.md` and `W-design-pass2-SHARED.md`. Files: `situation.html`, `now.html`, `scripts/shots.cjs`, `scripts/palette_cvd.py`, `palette-cvd.txt`, `shots/`. Almost everything below is design judgement (grade C); the CVD and verification numbers are our own computation (grade A, scripts saved).*

**Look first:** `shots/situation-desktop.jpg`, then `shots/situation-desktop-1657.jpg` (same page, playhead dragged back 30 minutes), then the phone shot and the two Now shots.

## (a) The direction, and what it keeps from A

The first hour of SPRING as six full-width tracks under one playhead, like a video or music timeline, with a moment panel beside them that says what was true at the moment under the playhead. Kept from A: the dark ground, ice blue `#72C3E6` as the one accent, the state word as the loudest thing on the page, A's semantic families (evidence ice, weakening orange, unknown hatch, safety crimson filled only, you in pale chalk), provenance as a caption voice ("tape · read 16:57Z"), and the reading order (state and sentence, since you looked, waiting for, time charts, evidence, notes).

## (b) What changes, mapped to Thomas's 08:45 points

| Thomas | What Tracks does |
|---|---|
| "slightly too terminal-like", "courier font not smooth" | No mono for any word or number. One sans (Geist). Mono survives only in the token address. Surfaces have three elevation steps and 6 to 12 px radii; tracks are lighter bands, not hairline rows. |
| "too much text", "internal information" | Zero ids, rule names, "illus.", "derived", "fixture" or schema words on the page (grep below). The header is one sentence. Each track has a title of one or two words, one readout, one caption. Method notes live only in the collapsed About this data drawer. |
| "hierarchy does not make sense" | Three levels only: the header (state and sentence), the workspace (tracks and moment panel), then collapsed evidence rows. |
| "wireframes v1 looked better; money in, money out" | v1 forms return as separate tracks: S6 bars (money in, wallets a minute), a money out lane (empty and hatched, because no exits are read), S7 as the holders area, S8 attention as its own lane with the lag band, S4's lanes under price. B3's in or out bars come back on the Now list as row sparklines (in above the line, out below). |
| "clock chart too complex" | The fused strip is gone. Each thing gets its own track with its own height; all share one x axis and one playhead. |
| "a slider that moves on all the charts at the same time" | The playhead is the primary control, not an accessory: a tag on the ruler, a line through every track, drag anywhere on any track. See (e). |
| "information density and visual pleasure", "collapsed text" | Every track has a filled form (area under price, bars, hatched lane, filled holder areas, a filled lag band, a chalk band for since-you-looked). Evidence sections are collapsed rows with a one-line summary; only the lead one is open. |

## (c) Type

**Geist** (Vercel, SIL OFL, on Google Fonts), 400/500/600, with `font-variant-numeric: tabular-nums` on the whole page. Why: it is precise and a little technical without being mono, its figures are tabular and its colon and Z read cleanly at 12 px, which matters on a page that prints a clock on everything. Fallback: Inter, then system-ui. Geist Mono only for `0x440e…36d5`. Sizes: state word 24 px / 600; hero numbers in the moment panel 22 px / 600; track readouts 16 px / 500; body and sentences 14 to 16 px / 400; captions 12 px / 400 at ink 60%; playhead tag 14 px / 600. Loaded in every shot (`fonts Geist/Geist Mono`).

## (d) Palette and CVD

Ground `#0A0D10`, workspace `#10151A`, track band `#161C22`, moment panel `#1C232B`, ink `#E6EAED`, neutral ink 74%, caption ink 60%. Hues are A's, unchanged. A soft ice radial glow at the top of the page carries no meaning. The playhead is ink white, not a hue: it is a control, not evidence. Output of `python3 scripts/palette_cvd.py` (forked from design options, same maths), track band excerpt:

```
  ink                      on ground 16.10   on surface 14.19
  neutral (ink 74%)        on ground  9.37   on surface  8.26
  unknown (ink 60%)        on ground  6.66   on surface  5.87
  evidence+ #72C3E6        on ground  9.89   on surface  8.72
  weakening #C8742E        on ground  5.56   on surface  4.90
  safety #D6336C           on ground  4.22   on surface  3.72
  user #E9E3A4             on ground 14.83   on surface 13.07
  evidence+  vs weakening   46.8   46.1   46.7   58.4
  evidence+  vs safety      60.1   33.8   34.5   68.5
  evidence+  vs user        39.0   37.3   40.7   34.8
  weakening  vs safety      34.4   33.5   16.2   10.5
  worst pair, any vision type: dE 10.5 (weakening vs safety, tritan)
```

Captions moved from A's 54% to 60% ink so 12 px captions pass 4.5:1 on the track band (5.87) and the panel (5.61). Safety stays filled: on Now it is a crimson pill with near-black 16 px semibold text, 4.2:1, which passes the 3:1 large-text and graphics rule but not 4.5:1; if that matters, raise the pill text to 19 px. Full output in `palette-cvd.txt`.

## (e) How the slider behaves

- One moment, in whole minutes 0 to 60 (16:27Z to 17:27Z). It starts at now.
- Drag with a pointer on the ruler or on any track; a click jumps. On touch, a horizontal drag moves the playhead and a vertical drag still scrolls the page (`touch-action: pan-y`, 6 px intent threshold). The tag is a real `role="slider"`: arrow keys move 1 minute, Shift or Page keys 10, Home and End jump to 16:27Z and now. "Back to now" appears when away from now. `window.setMoment('16:57Z')` is exposed for the shots.
- On a move: the tag prints the moment and "30 min ago" (the moment is printed once, large, on the handle); the part of every track after the moment dims to 38%; every readout shows the last read at or before the moment, captioned "read 16:57Z" when a read lands on it or "as of 16:42Z" between reads, never an interpolated number; the money-in bar under the playhead brightens; the attention band's label becomes "money ahead by 30 min at 16:57Z"; the you track says "30 min after your look"; the moment panel re-renders its state word (Developing before 16:32Z, then Money first), its sentence, its three numbers, and dims since-you-looked lines that had not happened yet.
- A thin state band under the ruler shows the same thing across the hour (grey Developing to 16:32Z, ice Money first after).
- `prefers-reduced-motion`: every transition is inside a `no-preference` query, so with reduce the playhead jumps and nothing fades. Verified: the reduced-motion phone run still moves to 16:57Z with correct readouts.
- On the phone the ruler is sticky at the top of the workspace, labels sit above each chart, and label rows sit above the playhead line so it never crosses a readout.

## (f) Illustrative values (look real on the page; also listed in About this data)

1. Your last look at 16:57Z (fixture `LAST_LOOK_MIN`), and so "4 changes since you looked".
2. The 5 minute Telegram preview cadence, drawn as check dots on the attention track.
3. Market cap $2.66M (1B supply assumed) and liquidity $84K, in the Market section.
4. Now list: LUMEN, MARLIN, KESTREL, OBOL rows entirely (states, sentences, bars), and the since-you-looked counts on every row except SPRING. AGRIPPA's two reads (142 and 1,070 wallets, top-20 0.76 to 0.37) are real; its bars spread each 30 minute count evenly across the interval.
5. "Developing until 16:32Z" is taken from build-0 as the brief says, not recomputed.

## (g) What this looks like when it goes wrong, and the guard

A terminal with rounded corners: six thin grey lines, codes for labels, a ruler you have to count, and a panel that is a table of fields. Guards used: every track is filled; titles are words ("Money in", "Holders", "You"); the ruler has five labels on desktop, three on the phone, and one big tag; the moment panel is a state word, one sentence, three numbers (one large, two paired), then short lines. Second failure: the flat reality of SPRING (holders barely move, later money bars are a few pixels) reads as "broken chart". Guard: bars keep a 4 px minimum and print "a min" rates, and the holders track labels its lines so flat reads as "about where they started", which is the finding.

## (h) What I did not do

- No hover tooltips, no snapping to reads, no zoom beyond the hour, no playback button (an obvious next step: press play and watch the hour replay in 10 seconds).
- Money in bars use rate per minute with linear height; the 5 minute burst dwarfs the rest. I did not log-scale it, on purpose.
- The Now list has no shared playhead; its sparklines are scaled per row, which hides magnitude between rows.
- No light theme, no wordmark work beyond a ring and letterspaced name, no AGRIPPA situation page.
- The reading list was read in about 12 minutes, not 25: I read the brand brief top half, OPTIONS §1 and §2, option A in full, the v1 first-hour shot, fixture.py, T7 §6 names and the Vesper read §2 to §5; I did not open `wireframes-v2/CHANGES.md` or `brief.html`.

Components used (T7 §6): C01 StateLine, C03 FreshnessCaption, C05 ClockStrip (split into tracks), C06 LagBracket (as a band), C07 FlowBars, C08 BulletBar, C09 LaneLine, C14 GapHatch, C17 WaitingForLine, C19 CompositionBar, C21 Sparkline, C23 EndOfList.

## Verification (run 09:00 Beirut)

- `NODE_PATH=/home/botbox/node_modules node scripts/shots.cjs`: all five shots scrollWidth equal to viewport, zero overflowing elements at 390 px, fonts Geist loaded; sizes 173, 138, 161, 86, 69 KB.
- 16:57Z check from `situation-desktop-1657.jpg` and the script: tag 16:57Z, price $0.00168 "tape · read 16:57Z", wallets entered 861, top-20 0.57, state Money first, since-you-looked lines dimmed 4 of 4 (all four are 17:08Z or later).
- No U+2014 in any file. Banned words and internal strings (`ev-`, `rel-`, `R4a`, `provisional`, `illus`, `fixture`, `T5`, `schema`, `derived`, `contract`, `provider`, smart money, alpha, edge, buy, sell, bullish, scores) in rendered page text with every drawer open: zero hits, including inside About this data. No rendered line of 20 words or more except the Now legend, which is three short sentences.
- Every number has a caption or sits in a track whose caption covers it. Nothing after 17:27Z appears.

Status: DONE
