Skip to main content

max / makeover

Carry the one-ring rule on the focus-ring token Rescued from makeover_layout::State::Focus's doc, which is deleted in makeover-layout 0.19.0. makeover-immediate cites the rule as its reason for not painting a second stroke, so it needs a home that outlives the variant. This token is the one shared artifact; the drawing is each renderer's.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-13 13:54 UTC
Signed with PGP, not checked
Commit: 0dabaaca6c8286d1e21d912f3fdda3382142e1f2
Parent: b258177
2 files changed, +13 insertions, -1 deletion
M Cargo.toml +1 -1
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "makeover"
3 - version = "2.5.0"
3 + version = "2.5.1"
4 4 edition = "2024"
5 5 description = "Shared theme loading for the make-family apps: TOML theme files parsed into intent-based color tokens, with perceptual derivations and WCAG contrast."
6 6 license = "MIT"
M src/lib.rs +12
@@ -673,6 +673,18 @@
673 673 if let Some(action) = get(&intents, "action") {
674 674 derived.push(("action-hover".into(), lighten(action, 0.05)));
675 675 derived.push(("content-on-action".into(), readable_on(action)));
676 + // The focus ring is the action colour itself, not a tint of it: a ring
677 + // is a statement that the keyboard is here, and a faded one reads as a
678 + // disabled control rather than an emphatic one.
679 + //
680 + // One ring, not one per primitive. Where the ring sits is a depth
681 + // question and not a per-component choice: a well takes it inside its
682 + // own edge and a raised surface takes it outside. That is one decision
683 + // with two renderings rather than one decision per component, which is
684 + // how the three apps ended up with three rings. This token is the one
685 + // shared artifact; which thing wears it, and how it is drawn, is each
686 + // renderer's own (see `makeover_layout`'s crate header, "reach, focus
687 + // and the focus ring").
676 688 derived.push(("focus-ring".into(), action));
677 689 }
678 690 if let Some(page) = get(&intents, "surface-page") {