Skip to main content

max / makeover-webview

Name the focus-ring token directly and say the browser owns focus State::Focus.token() was a second, vestigial path to the same variable. The :focus-visible rule was always the real mechanism, and it is unchanged: reach and focus are both the browser's here. Takes makeover-layout 0.19.0.
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: 025f9dcb4a0cf90c079f810139f31b201601937e
Parent: 5ff119b
2 files changed, +13 insertions, -5 deletions
M Cargo.toml +3 -3
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "makeover-webview"
3 - version = "0.34.0"
3 + version = "0.35.0"
4 4 edition = "2024"
5 5 # One copy of this renderer per dependency graph, enforced by cargo rather than
6 6 # by remembering. Two versions means the generated stylesheet and the emitted
@@ -17,7 +17,7 @@
17 17 # patch satisfy the requirement and still fail to compile. That happened once
18 18 # with `form::radio_html` calling `FieldKind::Radio`, and makeover-build is where
19 19 # it surfaced, one release later.
20 - makeover-layout = "0.18.0"
20 + makeover-layout = "0.19.0"
21 21 # The capability axis. `makeover-touch` decides whether a hover rule should be
22 22 # gated at all; `makeover-geometry` spells the gate as a media condition. Both
23 23 # answers are owned elsewhere and neither is re-derived here.
@@ -27,7 +27,7 @@
27 27 # satisfies "0.8" and keeps a second makeover-geometry in the graph next to the
28 28 # 0.7 this crate asks for. `Density` is nominally distinct across the two and
29 29 # the build fails on a type that reads as identical.
30 - makeover-touch = "0.11.0"
30 + makeover-touch = "0.12.0"
31 31 makeover-geometry = "0.7"
32 32
33 33 [lints.rust]
M src/lib.rs +10 -2
@@ -517,6 +517,12 @@
517 517
518 518 /// The keyboard focus ring, placed by the depth it lands on.
519 519 ///
520 + /// This is the webview's **focus ring** and nothing more. **Reach** and
521 + /// **focus** are both the browser's — the document decides what is reachable
522 + /// and `:focus-visible` decides which reached thing wears the ring — and no
523 + /// description states either. The three terms are defined once in
524 + /// `makeover_layout`'s crate header, "Reach, focus and the focus ring".
525 + ///
520 526 /// One ring for the whole system, because a focus ring's job is to be
521 527 /// recognised and three apps having three of them is the failure. What varies
522 528 /// is where it sits, and that comes off [`Depth`] rather than off a per-
@@ -545,9 +551,11 @@
545 551 // Raised, or no edge at all. Outside, standing off by its own width.
546 552 _ => w.to_string(),
547 553 };
554 + // The token by name. It is `makeover`'s, derived from the action colour,
555 + // and reaching it through a description member was a second path to the
556 + // same variable for as long as one existed.
548 557 format!(
549 - ".{selector}:focus-visible {{\n outline: {w} solid var(--{});\n outline-offset: {offset};\n}}\n",
550 - State::Focus.token()
558 + ".{selector}:focus-visible {{\n outline: {w} solid var(--focus-ring);\n outline-offset: {offset};\n}}\n"
551 559 )
552 560 }
553 561