lonja-buttonslisted
Install: claude install-skill zakariaf/CatchLaw
# Lonja Buttons
A Lonja button is a **stamp pressed onto paper, never a pill floating above it** — no shadow, no ripple, no gradient, radius at most 2dp, its whole hierarchy carried by field, rule weight and label. This skill owns the action ladder and how many of each is earned, the six-state matrix, target sizes under glove mode, the icon and label slots, destructive confirmation, and label wording. It does not own token values, the tap-target floor, async guards, or the dialog a destructive action opens.
Read the reference for the task at hand:
- `references/variant-ladder-and-states.md` — the five variants, what earns each, the six-state matrix, paper/night/sunlight resolution, glove metrics, disabled and busy semantics.
- `references/button-anatomy.md` — box metrics, icon and label slots, the label wording table, icon-only rules, button rows, the SegmentedButton boundary.
Run `scripts/check_lonja_buttons.sh` before a PR.
The 44dp tap-target floor and `Semantics(button: true)` are owned by `accessibility-as-code`; the dropped-`Future` hole in `onPressed: () => vm.record(fish)` is owned by `async-safety`; the confirmation dialog itself is owned by `lonja-dialogs-and-surfaces`; the hex behind every slot is owned by `lonja-design-tokens`. This skill governs the button that reads them.
## Non-negotiable rules
1. **ONE primary action per screen. Never two.** Exactly one `LonjaButtonVariant.primary` may be built per route; every other action steps down to `secondary`, `qu