METRONOME · DESIGN LAB · 2026-08-19 · 1.1+ ARC

Four Labs,
One Brief

Laurence asked for four things on 2026-08-19: a brighter, genuinely professional colour scheme; a metronome that is glanceable in ordinary use; a better Song Map; and drum rudiments with custom entry. Each got its own lab — a live HTML page at 1 CSS px = 1 iOS pt, painted from Theme.swift literals, with every claim either a computed number or a file:line citation. Nothing here touches the frozen 1.0 scope. This week's submission ships as-is; this is what comes after it.

WANT A
"A different colour scheme — a little brighter and really professional looking."
→ 01 PALETTE LAB
WANT B
"Easily glanceable to understand what's going on" in basic usage.
→ 02 GLANCE LAB
WANT C
A better Song Map display.
→ 03 SONG MAP LAB
WANT D
Rudiment display + custom rudiments, by PDF upload or manual accent/sticking entry.
→ 04 RUDIMENT LAB

01

PALETTE LAB

WANT A · D1

"Brighter" is not a hue question. The real one is how bright a field can get before the ember system breaks — and the answer is a computed ceiling: #F0A040 hits 2.14:1 on white, so it can never be the armed colour above field L 0.1135. Above that line armed burns instead of glowing. Three palettes are drawn to that number, and the shipping light scheme turns out to be inverted today — its armed beat is 28% quieter than an idle one.

VERIFIED IN BROWSER BLOCKER FIXED · BAR READOUT FIXED · BRIGHT-FIELD BLOOM SHIPPING BUG FOUND · S = 0.72 RULING: WHICH PALETTE
LIVE · 26%
OPEN LAB  → palette-lab.html
notes: D1-palette-notes.md
02

GLANCE LAB

WANT B · D2

The shipping screen is a tempo display that also makes noise. It reads BPM well at 1 m and tells you it is running — and it never tells you where you are. The beat dot is a fixed 100 ms flash, so at 120 BPM a glance lands on a row showing nothing 80% of the time. That is an encoding bug, not a sizing bug: make "played" an accumulated area instead of a transient and position reads at 100% duty. Three layouts then argue over what the freed space is for.

VERIFIED IN BROWSER BLOCKER FIXED · CLIPPED SPEC TABLES BLOCKER FIXED · TEMPO BANDS FIX IS NET −CODE RULING: BEACON / COCKPIT / MINIMAL
LIVE · 26% · PRESS 2 m
OPEN LAB  → glance-lab.html
notes: D2-glance-audit.md
03

SONG MAP LAB

WANT C · D3

Today the pill track asks opacity to answer "where am I", with 1.33:1 of headroom to say it — while a spent verse can render 2.04× brighter than the bar you are playing. Split the question by viewing distance instead: a NOW plate that names the section and counts bars-of-section, an approach gutter that warns two bars out, and a form ribbon that fits the whole tune to width and never scrolls. Brightness then only has to mean spent vs. not-spent.

VERIFIED IN BROWSER BLOCKER FIXED · BAR COUNT FIXED · PLAYHEAD NO LONGER CLIPPED RULING: SCROLL vs FIT-TO-WIDTH RULING: 23 SECTIONS → 5 ROLES
LIVE · 26%
OPEN LAB  → songmap-lab.html
notes: D3-songmap-notes.md
04

RUDIMENT LAB

WANT D · D4

The tick lane grows a rail. Right-hand strokes rise above it, left-hand strokes fall below it — so sticking gets a second, position-coded channel that is colour-blind safe by construction and survives at 2 m, where the letters cannot. One nullable field (hand: Hand?) lets the 27 accent grids the app already ships render through the same view, unchanged. On PDF import the honest answer is assist, not automate: every suggestion arrives unconfirmed and SAVE stays disabled until the drummer has cleared them.

VERIFIED IN BROWSER BLOCKER FIXED · TRANSPORT WAS INVERTED FIXED · LIT DEMOTED FROM CHROME PDF: TIER 3 OMR NOT ON ROADMAP RULING: ACCENT = LIT, OR NOT
LIVE · 26% · PRESS PLAY
OPEN LAB  → rudiment-lab.html
notes: D4-rudiment-notes.md

HOW TO SPEND TEN MINUTES HERE

1. Open 02 GLANCE LAB, press 2 m, and see which panel still tells you where you are. That is the whole audit in one control.

2. Open 01 PALETTE LAB, press RUN, then GREYSCALE TEST. If a palette still reads with the colour gone, its state channel is luminance, which is the only channel that survives a glance.

3. Open 04 RUDIMENT LAB and press PLAY. Watch the rail, not the letters — that silhouette is the part that works from a stand.

THE ONE-GLOW LAW, RESTATED

LIT #F0A040 means NOW — not "important", not "selected", not "primary". Shipping practice is already this narrow: dotLitAcc appears only on lit beats (LEDBeatRow.swift:294,341) and the running transport (TransportControls.swift:88,115-132).

On a bright field the sacred hex physically cannot carry the armed state, so it inverts to a burn core and #F0A040 becomes the mandatory bloom — on every lit dot, accent and normal, never a halo derived from the core. One additive armedBloom token makes that rule true in code rather than in prose.

WHAT THESE LABS CANNOT TELL YOU

Nothing here has been seen on glass. Every number converts a standard into a point size or computes a contrast ratio. None of it has met a real phone on a real stand under real practice-room light.

Two specific unknowns that need a device before anything locks: whether a burn-armed dot feels alive in peripheral vision the way a glowing one does, and whether Overpass Mono 600/700 can be used at all — the app bundles only Light and Regular (Info.plist:6-10), so every semibold in these mockups flattens to 400 on device.