Phase 2: the info card, selection, and what 35 lit keys taught

InfoCard fills the box that was empty: the layer hint and instruction
when nothing is picked, or the selected combo as chips with its name,
description and manual page. App carries the selection, and pressing a
control that holds several functions cycles through them, as the
reference does.

Lit is now an outline rather than a fill, and solid orange means
selected. This deviates from the mockups on purpose. They only ever
showed three lit keys; the SHIFT layer lights 35 of 54 controls, and
solid orange across all of them is a wall instead of a map. I checked
that by rendering the SHIFT layer rather than assuming, which meant
temporarily defaulting to it, capturing, and restoring the source.

That capture also caught a defect nothing else would have: SHIFT + VALUE
is MARK FN inside a 30px circle, and border-radius alone does not clip,
so the label sat outside the knob. Round keys now hide overflow and
shrink when lit.

Verified in light, dark, and on the SHIFT layer at 360x735. Typecheck
clean, 112 tests, www/ untouched so the Phase 1 APK still installs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 01:22:45 +03:00
parent 4961500fa7
commit c7c827ecf8
6 changed files with 228 additions and 29 deletions

View File

@@ -218,6 +218,15 @@ missing from the panel. The bank row is pinned at six keys ending in SHIFT
because `Panel.module.css` widens it with `:last-child:nth-child(6)`, which stops
matching silently if that row ever changes length.
**Lit is an outline; the fill means selected.** This deviates from the mockups,
which only ever showed three lit keys at once. The SHIFT layer lights 35 of 54
controls, and solid orange across all of them is a wall rather than a map. Orange
outline says "something is here"; solid orange says "this is the one you tapped".
**Round keys clip and shrink when lit.** `SHIFT + VALUE` is `MARK FN` inside a
30px circle. `border-radius: 50%` alone does not clip, so the label escaped the
circle entirely; the knobs need `overflow: hidden` and a smaller size when lit.
**Two strings are load-bearing for migration** and must not be changed casually:
`Entry.id` (below) and `STORAGE_KEY`, still `sp404mk2-layers-v1`. Together they
mean the boxes already on the phone are picked up by the React app rather than