harmony
rides for free between same-build phones. Per-guest transposition is a render-time offset held outside bars
— v2, but drawn here because it is the flagship’s harmony story. EAR MODE: coal plate, KEY only.i and I, measured, so a Bebas numeral cannot say minor —
active degree in ink, the rest amberDimText) rides beside it. In BOTH (the cycle default) it carries the other fact
— symbol big, numerals on the strip; in SYMBOLS / NUMERALS it carries the cell in the same notation on a cycle
and disappears on a tune (this bar already fills the name slot) — packet 1’s “ii–V bracketed → I” at zero geometry cost. A long cell windows on
onsets (this chord + the next two), never on bars, so 8 beats a chord reads ii · V · I, not ii · ii;
and the strip is measured after every paint — whole or absent, 16 → 13 → a shorter window → gone, because a clipped
A♭−7 reads A♭−. The counter is bar-in-key at Bebas 44. Row two: CHANGES · KEY F · 4THS → B♭
in the role-label slot the port left empty (the word CHANGES yields to the guide tones when they are on — the modechip already says it),
guide tones in the centre when toggled, BARS on the right.
The filament measures the key span, ash over the span’s hue. Two-chord bars: both symbols side by side, the
active one in ink — a weight swap on beat 3, never a second light. Minor prints as −7:
Bebas has one outline for m and M (measured), so the repo’s Dm7 would read
DM7 at 46 — the MINOR chip on the sheet lets you see that.→ C7 quiet; two bars out BARS 2 / BARS 1 at ink .55; the last bar of the
current chord counts BEATS 4·3·2·1 while the name warms .55 → 1 beat by beat and the ramp fills in the next
key span’s hue beneath it — two channels agreeing, the name first. The numeral carries a unit because on this surface a bare
IN 3 cannot say beats from bars. A key change reads → B♭ · C−7 — spelled in the
coming key, on both phones. At four beats a chord almost every bar is a last bar, so the gutter is
armed almost always — the intended tight-cycle feel, eye-test whether it is urgency or noise.BAR 6 / 48 · KEY 2 / 12.currentMeasure advances only on wrap, MetronomeEngine.swift:1460-1470 — the same tick as the accent dot).
The harmony surface therefore gets no alive colour of its own: no flash, no #F0A040, no
armedBloom. What changes is the content, the spine’s hue, and NEXT’s luminance the bar before.
Count the sacred hex on this page: the downbeat dot. The running transport is amber, like songmap-lab’s RUNNING toggle.
The census below is walked out of the live CSSOM, not grepped.
2·1. No ignition on beat 3, ever: that would be a second amber event in the bar. The step is measured below.!engine.isCountingIn (songmap-lab :1655-1659), and Reduce Motion renders the
static 0.85 tier with a full ramp and a playhead that jumps (:1661-1663). The Reduce-Motion tier is in the lab clock (the chip);
the count-in bars themselves are not drawn on this page — the guard is quoted, and the STOPPED state holds the gutter idle
and the filament at zero, which is the same rule the count-in must obey.| element | size | cap | @1 m | @2 m | tier |
|---|
| step | from | to | ratio |
|---|
i and I
are the same outline, so “ii” would print as “II” — the minor/major channel of a roman numeral is
case, and only the mono face carries it. That is a port-level finding, not a lab preference. Accidentals are a fallback run on device (neither bundled face has ♭/♯,
measured); the size and baseline here are designed, and the receipt flags the row.
| quality | symbol | numeral | guide tones | case |
|---|
G♭, SongMapPreset.swift:264-266; fifths says
F♯, :269-271; the ii–V–I preset spells B major’s ii as C♯m7 at :326 with no
rule). The table above is that rule. Countdown in D spells F♯△ / C♯7 where every
chart prints G♭△ / D♭7 — D11, open: in-key by default with a per-chord
spelling override. Minor keys simplify automatically (G♭ minor → F♯ minor) because the key signature is a
circle position, not a name.
max(w−3,1) (SongMapBandsView.swift:166) reaches 1-pt slivers past ~86 bars, which is why baked 144-bar
choruses are out and chorus-per-key is a display-time offset (v2).