makeover-touch
The adaptation layer of the make-family design system.
makeover answers what colour. makeover-geometry answers how much space,
and owns the two axes an adaptation is stated against: Density (pointer or
touch) and SizeClass (compact, medium, expanded). makeover-layout answers
what the thing is. This crate answers one question and no other:
Does this affordance exist here?
Like makeover-layout, it emits nothing. It is a description, rendered to CSS by
makeover-webview and to whatever the other renderers can express.
Why it is a crate and not a density preset
Measured across the MNW server's @media blocks (137) and goingson's
ui-mode-* blocks (192), bucketed by what the declarations inside actually
change:
| bucket | MNW | GO | retired by |
|---|---|---|---|
| density | 32% | 27% | a makeover-geometry preset |
| type | 23% | 15% | the type scale |
| columns | 20% | 12% | makeover_layout::Column |
| reflow | 16% | 17% | makeover_layout::Arrangement |
| show/hide | 12% | 12% | this crate |
| reposition | 6% | 20% | this crate |
| appearance | 1% | 17% | this crate |
The bottom three are the roughly 43% no spacing scale can retire. display: none on a keyboard hint says the affordance does not exist on touch. No amount
of gap retuning expresses that, and a scale that tried would be putting a
product claim on a measurement axis, which is what the July 2026 Touch
demolition was for.
What is here
Affordance, six members, drawn from what the two measured apps already gate by
hand:
| member | reads | rule |
|---|---|---|
Hover |
density | pointer only |
Hint |
density | pointer only |
Ancillary |
size | expanded only |
Detail |
size | medium and up |
Anchored |
size | compact only |
Overflow |
size | compact only |
Affordance::available(density, size) is the whole crate in one call. A
renderer asks per affordance and never branches on a width.
column_cutoff(size) closes the one seam neither neighbour could: layout defines
the priority ladder and Column::kept_at, geometry defines the boundaries, and
nothing said which cutoff a compact window uses. Both webview apps answered it
with nth-child on an ordinal, so inserting a column silently hid the wrong one.
The rules the tests hold
Density gates only what the contact patch touches. Hovering, and the keyboard chrome documenting shortcuts a touch surface cannot send. Not how much screen there is: a phone is small and touch, a tablet is big and touch. Putting a screen-budget claim on the input device is the specific failure that produced this crate.
Touch never gains an affordance pointer lacks. Touch is derived from pointer by subtracting what a fingertip cannot do, so it loses members and never gains one.
Collapsing is allowed, inverting is not. Borrowed from makeover-geometry,
where two gap relationships both resolve to zero cells on a terminal and stay
two members. Hover and Hint have identical rules today and are still two
members, because the call site names what is gated rather than the rule.
Compact compensates rather than only losing. Anchored and Overflow are
available at the narrow end and not the wide one. An adaptation that only
removes things describes a degraded layout, not a different one.
What is not here, on purpose
Boundaries. makeover-geometry quotes Material 3's window size classes at
600 and 840. This crate adds no third axis, no fourth class and no breakpoint of
its own.
A navigation shell fork. goingson currently carries two, concentrated in
.app-header, .tab, .tab-navigation, .pill-nav, .saved-views-sidebar
and .modal-container. That is not one shell adapting, it is two shells, and
choosing to build two is a product decision. goingson's own restructure is how
it stops being true.
Which class applies. The app decides, from a measured width and from what it already knows about the input. This crate takes both as arguments and never sniffs.
What a renderer does when an affordance is unavailable. Hiding it,
substituting it or showing it anyway is renderer policy, the same class of
decision makeover-layout deleted Fill::fallback for.
Status
Seeded at 0.1.0, unpublished, no renderer has been through it. The vocabulary is
six members and the intent is to stop there: makeover-layout's own warning is
that guessing at eight is how a description becomes a framework.
Design lives in the wiki note makeover-touch; the backlog is in GoingsOn under
the project of the same name.
Licence
MIT.