Skip to main content

max / balanced_breakfast

Adopt the makeover cascade layer and the generated interaction states Pins makeover-build 0.3.1 -> 0.7.0, so geometry.css and layout.css emit into @layer makeover, and index.html declares the order ahead of every link so it is a statement rather than an accident of link order. DELETED: - .button:disabled:hover / :active. It existed to out-specify the generated hover and pressed rules, in those words, and makeover emits disabled after both now and restates the rest depth, so source order settles it at equal specificity. - The background-color half of .button:hover in the touch block. makeover wraps its own hover in (hover: hover) and (pointer: fine), so on a fingertip there is nothing to take back. The border-color half stays: it undoes this file's own hover border, which makeover has no opinion about. KEPT, and the reason matters more than the rule. .button:disabled keeps its colour, border colour and cursor. Layers resolve before specificity, so the generated rule in the `makeover` layer loses to `.button` in this file however specific it is. An app must state the disabled variant of every property it sets at rest; makeover can only supply what the app is silent about. Deleting these is what broke disabled buttons in goingson. FILED, not changed: the focus ring here is `2px solid var(--category-four)`, documented as yellow, across nine selectors of which only .button and .tab are makeover's. makeover emits the same 2px on --focus-ring. Deleting the two would leave this app with two different focus rings, so the whole block stays until the colour question is settled. A NOTE ON THE ROW ACTIONS, which corrects the makeover-webview 0.13.0 commit message. That claimed both webview apps hand-wrote an undo for the ungated hide. goingson did; this app did not. It deleted its own reveal in favour of makeover's and had no touch override at all, so its row actions were simply unreachable on a touchscreen. 0.13.0 is a bug fix here rather than a cleanup, and the evidence for it was better than the message said.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-02 18:47 UTC
Signed with PGP, not checked
Commit: 3462879fde7a3f5076edb59ae7be221c0789a74d
Parent: 389318c
4 files changed, +58 insertions, -21 deletions
M Cargo.lock +20 -8
@@ -3076,9 +3076,9 @@
3076 3076
3077 3077 [[package]]
3078 3078 name = "makeover-build"
3079 - version = "0.3.1"
3079 + version = "0.7.0"
3080 3080 source = "registry+https://github.com/rust-lang/crates.io-index"
3081 - checksum = "d9b46dc1c83e6855486eeb765a895febd2f0f4a5abde5e44cc9760f419339bf5"
3081 + checksum = "6e0f93fd97d0ce7e3854c0dd8edddefac444de8197bbaa215dfced38cf7a03b6"
3082 3082 dependencies = [
3083 3083 "makeover",
3084 3084 "makeover-geometry",
@@ -3087,23 +3087,35 @@
3087 3087
3088 3088 [[package]]
3089 3089 name = "makeover-geometry"
3090 - version = "0.4.0"
3090 + version = "0.6.0"
3091 3091 source = "registry+https://github.com/rust-lang/crates.io-index"
3092 - checksum = "ec63a50eb9934c2cd416912048c9437a61657064c1947e40571f5fd37a22ffe6"
3092 + checksum = "b2466b8ca54dba9ef62f3679b33c90a0554e507c23e7b725c178ce9d277f542e"
3093 3093
3094 3094 [[package]]
3095 3095 name = "makeover-layout"
3096 - version = "0.6.0"
3096 + version = "0.7.0"
3097 3097 source = "registry+https://github.com/rust-lang/crates.io-index"
3098 - checksum = "ad745601b5220b2244d73a5da3f3854aefe4cdc955dd45c6d3aa5781ad645f5a"
3098 + checksum = "00d6235015ee1a15bc6b3936c5265229de3454524053eb67bf95fc6b741299b0"
3099 +
3100 + [[package]]
3101 + name = "makeover-touch"
3102 + version = "0.2.0"
3103 + source = "registry+https://github.com/rust-lang/crates.io-index"
3104 + checksum = "064bb24217e6d49ccafbefbcc29c7c42572c164feb98e5876e9ca49e77d58808"
3105 + dependencies = [
3106 + "makeover-geometry",
3107 + "makeover-layout",
3108 + ]
3099 3109
3100 3110 [[package]]
3101 3111 name = "makeover-webview"
3102 - version = "0.9.0"
3112 + version = "0.13.0"
3103 3113 source = "registry+https://github.com/rust-lang/crates.io-index"
3104 - checksum = "d4ae8b0857cfa95b5d698e22d5df17eb19bae978839d568ae5de02344892962b"
3114 + checksum = "ac7fbadaa7cf1e4a074a0b0c62a9ea3b1616f9de4e40990fab209560b807046f"
3105 3115 dependencies = [
3116 + "makeover-geometry",
3106 3117 "makeover-layout",
3118 + "makeover-touch",
3107 3119 ]
3108 3120
3109 3121 [[package]]
@@ -18,7 +18,7 @@
18 18 # Materialises all three generated files: themes/, geometry.css, layout.css.
19 19 # The build script needs nothing else; makeover and makeover-geometry reach it
20 20 # through here. Path dep while unpublished.
21 - makeover-build = "0.3.1"
21 + makeover-build = "0.7.0"
22 22
23 23 [dependencies]
24 24 bb-interface.workspace = true
@@ -4,7 +4,22 @@
4 4 <meta charset="UTF-8">
5 5 <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
6 6 <title>Balanced Breakfast</title>
7 - <!-- Generated from makeover-geometry by src-tauri/build.rs. First, so the
7 + <!-- Cascade layer order, declared before any stylesheet so it is a
8 + statement rather than an accident of link order. A layer's position is
9 + fixed where its name is FIRST seen, so without this the two generated
10 + files below would establish `makeover` simply by loading first, and
11 + reordering the links would silently reorder the cascade.
12 +
13 + Earlier in the list = lower priority. `makeover` is first because the
14 + design system is what the app overrides, never the reverse. Unlayered
15 + rules still beat every named layer, which is why styles.css works with
16 + no layers of its own; the other three names are declared ahead of any
17 + layer adoption here and are empty until then. Declaring an empty layer
18 + costs nothing. -->
19 + <style>@layer makeover, base, components, responsive;</style>
20 +
21 + <!-- Generated from makeover-geometry and makeover-webview by
22 + src-tauri/build.rs, both into `@layer makeover`. Geometry first, so the
8 23 stylesheet can read --gap-* and --step-* off :root. -->
9 24 <link rel="stylesheet" href="css/geometry.css">
10 25 <link rel="stylesheet" href="css/layout.css">
@@ -604,16 +604,20 @@
604 604 border-color: var(--content-muted);
605 605 cursor: not-allowed;
606 606 }
607 - /* Inert on both, and both properties on both selectors. Overriding only
608 - box-shadow on :active left a disabled button taking the pressed fill
609 - while keeping the raised edge, which is the fill-and-edge disagreement
610 - the generated rules exist to prevent. Higher specificity than the
611 - generated .button:hover and .button:active, so these win. */
612 - .button:disabled:hover,
613 - .button:disabled:active {
614 - background: var(--surface-raised);
615 - box-shadow: var(--bevel-raised);
616 - }
607 + /* The `.button:disabled:hover, .button:disabled:active` pair that used to
608 + sit here is gone. It existed to out-specify the generated hover and
609 + pressed rules, in those words, and makeover-webview 0.10.0 emits
610 + disabled after both and restates the rest depth, so source order settles
611 + it at equal specificity. Nothing has to reach (0,3,0) to win any more,
612 + which matters because raising a selector is what the cascade layer would
613 + have had to unpick.
614 +
615 + The colour, border colour and cursor above stay, and are not a candidate
616 + for the same deletion. Layers resolve before specificity, so the
617 + generated `.button:disabled` in `makeover` loses to `.button` in this
618 + file whatever its specificity. An app has to state the disabled variant
619 + of every property it sets at rest; makeover can only supply what the app
620 + is silent about. */
617 621 .button--primary {
618 622 background-color: var(--action);
619 623 border-color: var(--action);
@@ -1977,7 +1981,13 @@
1977 1981 .source-item.active:hover { background-color: var(--surface-sunken); }
1978 1982 .sidebar-saved:hover { background-color: transparent; }
1979 1983 .sidebar-saved.active:hover { background-color: var(--surface-sunken); }
1980 - .button:hover { background-color: var(--surface-page); border-color: var(--border); }
1984 + /* Border only. The `background-color` half was taking back the generated
1985 + hover fill, and makeover-webview wraps its own hover in
1986 + (hover: hover) and (pointer: fine) now, so on a fingertip there is
1987 + nothing left to take back. What remains undoes this file's own
1988 + `.button:hover { border-color: var(--border-strong) }` above, which
1989 + makeover has no opinion about. */
1990 + .button:hover { border-color: var(--border); }
1981 1991 .button--primary:hover { background-color: var(--action); border-color: var(--action); }
1982 1992 .button--success:hover { background-color: var(--category-four); border-color: var(--category-four); }
1983 1993 .star-btn:hover { color: var(--content-muted); transform: none; }