Glance Lab v2 · 2026-08-26 · 1.1+ design arc (1.0 scope frozen)

GLANCE LAB v2 — the radial cockpit

Six panels, one clock, identical state. Panel 0 reproduces the shipping PERFORMANCE screen including its 100 ms beat flash (LEDBeatRow.swift:99-105) — at 120 BPM that is a 20 % duty cycle, so four glances in five land on a bar row showing no beat at all. A, B and C are the v1 layouts. D1 and D2 are the v2 lead: Beacon's ring carrying Cockpit's information, plus the one thing neither parent had — which note is sounding. 1 CSS px = 1 iOS pt — every size on this page is the number to ship.

Press 1 m or 2 m and the row shrinks to the visual angle a real phone subtends at that distance on a music stand. That is the whole test: what is still there when it gets small? On a phone, use FOCUS — one panel, near 1:1.

Owner verdict · 2026-08-22 · ratified

Fuse BEACON with COCKPIT. The radial variant is the one the owner picked; the information density he wants is Cockpit's. D1 and D2 are that fusion, and they are the lead — 0, A, B and C stay on the page as the comparison baseline, not as candidates. The v1 note on A · BEACON stands unchanged: it survives as a STAGE MODE, for players who are genuinely reading the phone out of the corner of the eye and want nothing else on it.

The two sub-variants differ on exactly one axis — how much of the panel the dial gets. D1 spends it on the ring (a 318 pt beat ring and a 240 pt subdivision pip ring); D2 spends it on the numerals (a 134 pt dial gauge, the largest bar/beat figures on the page). Both clear R1's tempo band at 2 m and carry beat position at 100 % duty. Every number is stated under its own panel and computed from R1 §2.2, not asserted.

Armed-colour rule for this scheme. The field is the shipping Ember dark #0C0C0E, whose relative luminance is far below the v1 law's 0.1135 ceiling, so #F0A040 remains a legal armed colour here. What changed is how often it fires: the app already carries two lit tokens — dotLitAcc for accent beats, dotLitNorm for plain ones (LEDBeatRow.swift:290-294) — and v1 flattened them into one. v2 restores the split: the sacred ember appears exactly once per bar, on the downbeat segment. Everything else that is sounding now reads cream. Ratios below are computed in-page from the tokens, not typed in.

120BPM
4.0SUB HZ
Over 180 BPM = over 3 Hz. Downbeat bloom is off; position is carried by fill + motion (R1 §5.4 / WCAG 2.3.1).
AUDIT BASELINE

0 · CURRENT

The shipping PERFORMANCE screen, reproduced from source. Tempo is the hero; beat is a 100 ms flash; bar hides in 14 pt monospace.

20′ optimal
14′ floor
8:09▮▮▮
≡ EDIT
−
120
BPM · MODERATO
+
003·01 BAR · BEAT
BAR3
STOP
TAP
TAP TEMPO120 BPM
TIME SIG4/4
SUBDIVISION♩
MetronomeSessionPlaylistStatsMore
VARIANT A

A · BEACON

The bar becomes one 334 pt ring. Burnt arc = beats played, LIT head = now, sweep hand = continuous motion. Built for the corner of your eye.

20′ optimal
14′ floor
8:09▮▮▮
ME
LIVE
120
MODERATO
3
METER4/4
NOTE♩
TAP▣
MetronomeSessionPlaylistStatsMore
VARIANT B

B · COCKPIT

One bezelled instrument: tempo, beat ladder, bar / meter / note as co-equal gauges divided by hairlines. The only variant whose tempo clears the optimal band at 2 m.

20′ optimal
14′ floor
8:09▮▮▮
ME
LIVE
120
BPMMODERATO
BAR003
METER4/4
NOTE
TAP
MetronomeSessionPlaylistStatsMore
VARIANT C

C · MINIMAL STAGE

Four objects total. Numeral, filament rule (beat + meter), bar figure, ignition. Everything else deleted — labels included.

20′ optimal
14′ floor
8:09▮▮▮
ME
120
003
STOP
MetronomeSessionPlaylistStatsMore
V2 · OWNER DIRECTION

D1 · RADIAL COCKPIT — DIAL-LED

Beacon's ring, Cockpit's readouts, one bezel. A 318 pt beat ring with an inner 240 pt subdivision pip ring; bar · beat · meter · note as gauges beneath it.

20′ optimal
14′ floor
8:09▮▮▮
ME
LIVE
120
BPM · MODERATO
BAR003
BEAT01
METER4/4
NOTE ♫EIGHTH
TAP
MetronomeSessionPlaylistStatsMore
V2 · OWNER DIRECTION

D2 · RADIAL COCKPIT — CLUSTER-LED

Same parts, opposite weighting. The dial shrinks to a 134 pt gauge beside a 128 pt numeral, and the subdivision moves to a full-width ladder.

20′ optimal
14′ floor
8:09▮▮▮
ME
LIVE
120
BPM · MODERATO
SUBDIVISION GRIDEIGHTH
BAR003
BEAT01
METER4/4
NOTE ♫
TAP
MetronomeSessionPlaylistStatsMore

WHAT THE FUSION TAKES FROM EACH PARENT

From BEACON: the ring. Position as a 2.84° object at 1 m that needs no fine detail resolved, plus a sweep hand — R1 §5.2's two strongest peripheral channels, luminance onset and motion, instead of only the first.

From COCKPIT: the bezel and the hairline-divided gauges, and the tempo size that made it the only v1 variant legible at 2 m. D1 runs Bebas 118 — Cockpit's exact hero — inside the ring rather than above a ladder.

From neither: the subdivision. No v1 panel said which note is sounding; the shipping screen doesn't either. It is a third concentric channel in D1 and a ladder in D2, and it is the reason the fusion is worth building rather than just picking one parent.

THE SUBDIVISION CHANNEL HAS ITS OWN CEILING

The beat's rate ceiling is the familiar one: 180 BPM = 3 Hz = WCAG 2.3.1. The subdivision's is bpm × subdiv / 60, which crosses 3 Hz at 90 BPM in eighths and reaches 8 Hz at 120 BPM in 16ths. Move the Subdivision control and watch the SUB HZ readout.

That is legal — but only by the area exemption. A lit pip is 5 × 22 = 110 pt²; a lit ladder cell at 4/4 in eighths is 37 × 34 = 1 258 pt². A 10° field at 1 m is 1 123 pt across, so its area is ≈990 500 pt² — the pip is 0.011 % of it and the cell 0.13 %, against a 25 % threshold. The design rule that falls out: the faster a channel runs, the smaller it must be. Subdivision may never be a large-area cue.

A second, different limit arrives higher up. R1 §5.3 puts critical flicker fusion at 22-30 Hz; 240 BPM × 6-let is 24 Hz, where the onsets stop being discrete events. Position survives anyway — because it is carried by accumulated area, not by the onset. That is the §6 fix earning its keep a second time.

RING vs LADDER — GRID ROOM IS THE ARGUMENT

D1 and D2 differ on one number. A ring at radius 120 pt has 754 pt of circumference; D2's ladder has 325 pt of width (measured in the page, not estimated). Same panel, 2.3× the room, because a circle spends the diagonal a rectangle wastes.

It only matters at the top of the range. At 4/4 in eighths (8 marks) both are comfortable — 94 pt vs 38 pt of pitch. At 6/8 × 6-let (36 marks) the ring still gives 20.9 pt while the ladder gives 6.1 pt — 3.3 arcmin at 1 m, under the 5′ optotype floor, i.e. not small but unresolvable. If dense subdivisions matter, the dial is not a style preference.

WHY LIT FIRES ONCE PER BAR NOW

The shipping app has always had two lit tokens: dotLitAcc #F0A040 for accent beats and dotLitNorm #EAD8B0 for plain ones — see LEDBeatRow.swift:290-294, which picks between them per beat. The v1 panels on this page painted every now-beat with the ember.

D1 and D2 restore the split, and it matters more with subdivisions on: at 4/4 in 16ths there are 16 "now" events per bar. If all sixteen were #F0A040, the one colour that means downbeat would fire sixteen times a bar and stop meaning anything. Here it fires once. The sounding subdivision reads cream at 13.90:1 — brighter than the ember in luminance, but not the ember. Ranking is by area, not by hue: ring segment > beat pip > sub pip.

THE ONE FIX ALL THREE SHARE

Shipping encodes the beat as a transient: flashBeat = beat, cleared 100 ms later (LEDBeatRow.swift:99-105). Between pulses the row shows nothing about where you are.

A, B and C encode it as accumulated area — cold / burnt / LIT. Count the burnt cells and you have the beat, at any instant, at 100 % duty. Onsets stay abrupt (R1 §5.2), so the luminance-capture channel is untouched; what changes is that missing the onset no longer costs you the information.

WHY THE LABELS DIED

Every caption on the shipping screen sits at 8-9 pt system font — a cap-height of 5.8-6.5 pt, which subtends 3.1-3.5 arcmin at 1 m. The 20/20 optotype floor is 5 arcmin. Those labels are not "small", they are below the resolution limit of a normal eye at stand distance.

So a label is a 0.4 m object, not a 1 m one. Either size it to clear MIL-STD-1472H's 10-arcmin soft-display minimum at 0.7 m (13.1 pt cap ≈ 19 pt Overpass Mono) or delete it. C deletes them all; B keeps three at 11-14 pt because the cluster's identity depends on them; A keeps two.

THE 180 BPM CEILING IS REAL

180 BPM is exactly 3 Hz — WCAG 2.3.1's flash ceiling. Push the tempo slider past it and the downbeat bloom switches off in all three panels; position keeps reading off the fill, and the sweep / filament keep the motion channel alive (R1 §5.4, path 2).

The area exemption is generous at these sizes: at 1 m a 10° field is ~1123 pt across, so 25 % of it is a 561 pt disc. Beacon's lit arc is 0.35 % of that field, the 92 pt ignition 0.7 %. Only a full-screen wash would be a problem — at 0.7 m a whole 393×852 pt screen is 69 % of the 10° field. Never flash the field.

PALETTE IS D1'S CALL, NOT THIS PAGE'S

Tokens here are the shipping Ember dark literals so the comparison isolates layout. They sit in a single :root block; swapping in a brighter candidate ground is a one-block edit.

Two numbers D1 should carry over: dotNorm #34322E is 1.53:1 and the idle ignition border amberDeep #7A4A10 is 2.62:1 — both under WCAG 1.4.11's 3:1 for meaningful non-text. The stopped transport is a 2.6:1 ring on a 1.03:1 disc. "Brighter" is not just taste here; the resting states are measurably under floor.