Record the settled visual spec in CLAUDE.md

Direction A (manual) with a dark counterpart is settled, so reference/
is demoted: it remains authoritative for behaviour and data - combos,
layer logic, Leitner scheduling, the pointer model - but no longer for
appearance. This section and the canvas govern that.

Captures the language (flat fills, hard zero-blur offset shadows, 2px
outlines, a single #FF4A00 that means 'live', positive LCD, no green or
red), the panel construction drawn from the hardware (circle behind the
display, silkscreen group captions, FX buttons dark with orange text),
the measured type rules that stop labels overflowing, and the vertical
budget nothing may exceed.

Typeface and accent are still open and are noted as such; neither
blocks the data and logic work.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 00:26:12 +03:00
parent e2e9fcddb5
commit 9e897a26ea

View File

@@ -156,6 +156,58 @@ now empty and bar styling is configured in `capacitor.config.json`
installs over Phase 1's without an uninstall and drill progress survives. installs over Phase 1's without an uninstall and drill progress survives.
`appId` is `dev.ncode.sp404layers` and must not change for the same reason. `appId` is `dev.ncode.sp404layers` and must not change for the same reason.
## Visual spec (settled — build Phase 2 against this)
The look is **Direction A, "manual"**, after Teenage Engineering's EP-133 manual,
with a dark counterpart. Canvas: https://claude.ai/artifact/4Jvjop1hEsJY2xzcpGrrgg
Working files: `design/canvas/*.dc.html` + `canvas.json` (the seeded payload is
gitignored and regenerates from them).
**`reference/` is now the behaviour and data spec only.** It no longer governs
appearance — this section and the canvas do. Combos, layer logic, Leitner
scheduling and the pointer model still come from the reference.
The language:
- Flat fills, no gradients, no blur. Depth is a **hard zero-blur offset shadow**:
4px on the panel, 3px on cards and pickers.
- **2px `#111111` outlines** everywhere (dark mode: 2px `#000000`).
- **One accent, `#FF4A00`**, meaning exactly one thing: this control is live.
Pad numerals stay grey so the accent is never ambiguous.
- Uppercase, technical labels; monospaced numerals and annotations.
- **No green or red.** Drill feedback is orange fill for correct, dashed outline
for not-quite.
- The LCD is a **positive** display — `#C9D2C4` with dark text — in both modes.
Panel construction, drawn from the hardware rather than invented:
- The screen's circle sits **behind** the display, not around it: a 124px circle
behind a 168×84 LCD shows only as two 20px caps above and below. The display
names the layer and lists what is on it.
- The control block is grouped as the unit is silkscreened (`PATTERN SEQUENCER`,
`SAMPLING`, `SAMPLE EDIT`, `BANK`), each group a hairline bracket caption over
its row, 10px between the two blocks and 7px between groups.
- FX buttons are dark with orange text, as on the device.
- Key labels are **7px, no letter-spacing, 1px side padding**. A left-block
button is 35.9px wide and only 27.9px of that is usable text width; at 8px with
tracking `SAMPLE` measured ~27.8px and sat flush against the border.
`RESAMPLE`, `REMAIN` and `REVERSE` are the only labels with no space in them,
so they carry soft hyphens — everything else wraps at its space.
- `SHIFT` gets `flex: 1.25` in the six-button bank row, as the hardware widens it.
Vertical budget at the real 360×735, which nothing may exceed:
```
root 8 + 44 + 8 + 525 + 8 + 84 + 8 + 50 = 735
panel 8 + 36 + 8 + 124 + 10 + 134 + 10 + 187 + 8 = 525
pads (187 - 15) / 4 = 43px rows
```
**Still open:** the typeface (mockups use Space Grotesk + Space Mono; Martian
Mono and Archivo are the alternates on the specimen board) and whether the accent
is `#FF4A00` or the current, softer `#ff7a1a`. Neither blocks the data and logic
work, only the UI.
## Phase 2 must carry these UI changes ## Phase 2 must carry these UI changes
Phase 1 fixes a strip ergonomics problem in `native/native.{css,js}` rather than Phase 1 fixes a strip ergonomics problem in `native/native.{css,js}` rather than