Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Density inventory

Every dp dimension that teksilo-widgets, the three theme presets and teksilo-preview-ui bake in, with the density treatment package P20 applied to each — the route by which that dimension reaches a density, or the reason it has none. This is the artifact to audit conformance against, and the fixture list P40's target-conformance gate walks; it is also the evidence behind the target numbers quoted in the touch design.

Status: P20 has landed. The treatment column is no longer a plan. Each row either names the function that resolves it (FooRecipe::for_tokens, foo_bar(&InputTokens), density_min_size(..)) or says, in the same column, why the dimension is fixed and which mechanism carries its touch conformance instead. crates/teksilo-widgets/tests/density_projection.rs parses this document and holds it to those rules, so a row that claims a treatment the code does not implement fails a test rather than misleading a reader.

How a dimension reaches a density

The projection is not a token read at paint time. ComponentStyleSlots is empty in every shipped preset, so there is nothing in a Theme to re-run; instead each recipe reads the tokens at its own construction site, in the crate that owns it. Three things make that work:

  1. Every Recipe*Style and its *Recipe gained for_tokens(&InputTokens) -> Self, and Default is now defined as for_tokens(&InputTokens::default()) — so the Compact column below cannot drift from the shipped values.
  2. Every widget's lazy fallback — Rc::new(RecipeFooStyle::default()) — became Rc::new(RecipeFooStyle::for_tokens(&ctx.theme().input)), a one-line change at a site that already existed.
  3. A preset that installs Tier-3 slots of its own registers a teksilo_core::styles::DensityProjection in its theme extensions. Theme::with_density calls it when present, so Fluent, macOS and Material 3 rebuild their slots for the new density instead of carrying Compact dimensions across. A slot an app installed stays untouched — a hand-written style owns its own metrics — which is documented behaviour, not an oversight.

WidgetTree::set_input_density marks BindingLevel::Rebuild, because a dimension baked in build() cannot be moved by a layout+paint mark.

The floor rule, and why some Targets do not scale

dp(base, TargetRole::Target, tokens) is a floorbase.max(target_size) — so routing a dimension whose Compact value is below 24 dp through it would raise it at Compact, which the programme's no-regression invariant forbids. Therefore:

A Target dimension is routed through dp(.., Target, ..) only when its Compact value already meets min_target_conformance (24 dp). Every sub-24 dimension keeps its painted value at every density and takes its conformance from the hit mechanisms — hit_outset, target_regions, partition_targets, the miss-only slop pass — which is exactly what A10 designed them for ("hit-only: no layout moves, Compact renders identically").

The one exception is a MinSize: a MinSize is a hit box, and 24 dp is the floor that governs hit boxes, so density_min_size enforces it there. The sites in the whole tree that were below it are enumerated in §0, and each of them changes at Compact. That list is the only place the count lives, so a later package that takes another such exception adds a row there rather than a number here.

§0 — the sites that change at Compact

The only Compact-visible changes the density work makes, and the enumeration the rest of this document and the target-conformance gate both defer to: an exception that is not a row here has not been taken. Each was an interactive control whose own minimum hit box sat below WCAG 2.2 SC 2.5.8 (level AA). Rows are not call sites — the macOS entry below is four sites, three of them on one constant and the fourth on two rungs of its own.

SiteWasIsWhat a reader sees at Compact
teksilo-preview-ui/src/navigator.rs — a navigator tree row22 dp24 dpEach row in the previewer's navigator is 2 dp taller; a full-height list shows marginally fewer rows.
teksilo-theme-macos — the push button, the text field and the switch (one number: MACOS_CONTROL_HEIGHT), plus the icon button (IconButtonRecipe's own two small rungs)22 dp, and 18 dp at IconButtonSize::Compact24 dpFour macOS-preset controls get a 24 dp minimum hit box. The painted metric is unchanged in every one of them — Apple's 22 dp bezel, field chrome and switch track, and the icon button's own square, which is 22 dp at its default rung and 18 dp at IconButtonSize::Compact — and only the box around it moves, with the paint centred inside. So three of the four gain 2 dp and the icon button's small rung gains 6. The button and the field take theirs from a MinSize; the icon button's is the shared conformance-box helper (teksilo-widgets/src/common/conformance_box.rs, also the calendar nav arrow's mechanism) called from RecipeIconButtonStyle::make_body — under every other preset, whose recipes already clear the floor, the helper is the identity and builds no box at all — and the switch's is the floor in MacOsSwitchBody::layout_response that its Int UI counterpart already had. Added by the preset-gate package, which measured all four under the floor at every density — the floor does not scale, so this was never a Compact-only shortfall.
teksilo-widgets/src/code_editor/completion.rs — a suggestion row (added by P25)22 dp measured24 dpUp to 2 dp taller per row of the completion popup. The text and its padding are unchanged; the floor is a MinSize around them. The 22 dp is the row's height in a headless tree under the shipped typography — a real text backend with a taller line may already clear the floor, in which case the MinSize is inert at Compact as well.

Nothing else in the rows below changes at Compact.

One row left this table, and P40 measured why. text_input.rs's clear button was a fourth entry here: 16 dp raised to a 24 dp MinSize box. A later touch package replaced that with a hit-only mechanism — the slot is crate::button::HitTarget::fixed(16.0, 16.0) declaring a Widget::hit_outset, so the paint stays 16 dp at every density and the field's row does not widen. text_input.rs's own module doc states the trade ("raising its box would widen every field in the workspace at Compact"), and the target-conformance gate measures the result: the slot paints 16 × 16 and reaches 24 × 24 at Compact, pinned by an_outsets_claim_survives_the_slop_pass_in_the_shipped_controls. It is therefore not a Compact-visible change and cannot sit in a table whose whole job is to enumerate those. That figure is the slot with a query typed; with the field empty HitTarget::active withdraws the outset and the same slot reaches 22 × 24 while still taking the press — a written allow-list entry of its own, measured by the search_field/empty fixture, and a targeting question rather than a dimension one. The §1 row for its old MinSize::new call site is corrected in place rather than deleted, so the site P02 audited is still accounted for.

The completion-popup row is the same exception as the others and worth stating once more, because it is the case where the floor rule's escape hatch does not exist: a stack of adjacent rows cannot take its conformance from hit_outset, since the only neighbour a row could borrow space from is another row, and an outset on each of them just moves the boundary between the two. A MinSize is a hit box, 24 dp is the floor that governs hit boxes, and the paint has to move.

Dimensions live in three homes, and P20 has to reach all three:

  1. MinSize::new(w, h) call sites — the existing hit-area pattern (§1).
  2. crates/teksilo-widgets/src/styles/recipe_*_style.rs — the 39 default Tier-3 recipes, whose module constants are the real dimension table for every themable widget (§2).
  3. const … : f32 in the widget modules themselves, plus the theme presets' own constants (§3, §4).

Classification

ClassMeaningP20 treatment
Targetsomething a finger must hit — a control, a row, a cell, a tappable columnscales with target_size (24 / 32 / 44 dp) when its Compact value already clears 24 dp; otherwise visual-fixed with a named hit mechanism
Graba drag affordance — a gutter, a thumb, a resize grip, an auto-scroll bandscales with grab_size (6 / 10 / 16 dp), or hit-only via hit_outset / target_regions with the visual preserved
Spacingpadding, gap, inset, margin, indentscales with spacing_factor (1.00 / 1.15 / 1.30)
Decorationpurely visual — corner radius, hairline, glyph metric, elevation, container clampfixed — <reason>

Two treatments recur and mean something specific:

  • "visual fixed; grab via hit_outset" — the painted geometry is unchanged at every density (Compact renders identically, which is the programme invariant); only the hit rectangle grows. A 6 dp splitter gutter still paints 6 dp and is grabbable at 24 dp (44 at Touch).
  • "moves into GestureProfile" — the constant is a recognizer threshold, not a layout dimension. It leaves the widget entirely and becomes a per-pointer-kind token; density does not enter into it.

How each count was measured

# §1 — MinSize::new call sites (all, before excluding tests)
grep -rn "MinSize::new" --include=*.rs crates/ | wc -l                        # 40

# §2 — recipe files, and the one carrying a min_size field
ls crates/teksilo-widgets/src/styles/recipe_*_style.rs | wc -l                # 39
grep -rln "min_size" crates/teksilo-widgets/src/styles/recipe_*_style.rs      # 1 file
grep -rnE '^\s*(pub )?const [A-Z_0-9]+: f32' \
     crates/teksilo-widgets/src/styles/recipe_*_style.rs | wc -l              # 233

# §3 — widget-module constants outside styles/
cd crates/teksilo-widgets/src
grep -rnE '^\s*pub const [A-Z_0-9]+: f32' --include=*.rs . \
  | grep -v '/styles/' | grep -v 'tests.rs' | wc -l                           # 53
grep -rnE '^\s*const [A-Z_0-9]+: f32' --include=*.rs . \
  | grep -v '/styles/' | grep -v 'tests.rs' | wc -l                           # 113

# §4 — theme presets and the previewer UI
grep -rnE '^\s*(pub )?const [A-Z_0-9]+: f32' --include=*.rs \
     crates/teksilo-theme-{fluent,macos,material3}/src \
     crates/teksilo-preview-ui/src | grep -v tests.rs | wc -l                 # 133

Totals

Class counts after P20's corrections (the pre-flight classification is in Corrections; 27 sub-24 dp Target rows moved to a visual-fixed treatment, which is why Decoration is larger and Target smaller than the P02 pass reported).

HomeRowsTargetGrabSpacingDecorationNot a dimension
§1 MinSize::new (production)29280010
§2 recipe constants2324314679414
§3a widget-module pub const5310323143
§3b widget-module private const1121125163228
§4 theme presets + previewer UI133251425645
Total5591175613120550

Of those, 228 rows carry a live density route (97 through dp(.., Target, ..) or density_min_size, 128 through spacing(..), plus the three MinSize floor sites); the rest are fixed, each with its reason in its own row.

The §2 and §3b row counts are one below their grep counts (233 and 113): each table drops a single-letter local alias declared inside a function body — recipe_tab_style.rs:484 (const T: f32 = TAB_UNDERLINE_ACTIVE;) and preview_catalog/icons.rs:22 (const SZ: f32 = 16.0;). Neither is a dimension definition.

"Not a dimension" rows are ratios, alphas, shadow densities, epsilons and durations that the const … : f32 grep sweeps up; they are listed so a later reader can see they were considered and dismissed, not missed.

Corrections to the pre-flight estimates

EstimateRealWhy
37 non-test MinSize::new sites29 production sites (40 total)37 = 40 minus the three sites in files named tests.rs. It does not exclude the five sites inside inline #[cfg(test)] modules (button.rs:1287-1288, popover_widget.rs:907, min_size.rs:226/:238, scroll_bar.rs:868) nor the two doc-comment occurrences (min_size.rs:22, scroll_area.rs:25).
exactly one recipe has min_sizeconfirmedrecipe_button_style.rs onlyThe field is on ButtonRecipe; three variant constructors set it (lines 267, 298, 325), all to Size::new(72.0, 24.0).
~53 dimension constants in widget modules53 pub const … : f32 outside styles/, of which 50 are dimensionsThe three non-dimensions are shadow.rs:46/48/50 (DENSITY_TOOLTIP / DENSITY_SURFACE / DENSITY_DIALOG, unitless elevation multipliers). The 53 figure is exact but it is the public subset — a further 113 private const … : f32 (112 after dropping one in-function alias) live in the same modules and P20 must touch them too (§3b): they hold the splitter gutter, the dock gutter, every SCROLLBAR_THICKNESS, the five auto-scroll EDGE / MAX_VELOCITY copies and the text-drag threshold.
~276 pub const f32 in teksilo-widgets278 pub const … : f32, of which 225 are in styles/grep -rnE 'pub const [A-Z_0-9]+: f32' --include=*.rs crates/teksilo-widgets/src | wc -l

Corrections P20 made to this document

The counts above survived; four classifications and one value did not, and the row that made the largest difference was one nobody had looked at twice.

CorrectionRowsWhy
A sub-24 dp Target cannot "scale with target_size."27dp is a floor, so the treatment as written would have raised 27 dimensions at Compact — from a 12 dp twist arrow to a 22 dp colour swatch — against the invariant the whole programme rests on. Each is now visual-fixed with the hit mechanism that carries it named. See the floor rule.
ACCORDION_FILL_HEADER_EXTENT is 30 dp, not 283The three §1 rows quoted 28; accordion.rs says 30.0. The dock header strip is 30 dp at Compact and reaches 32 / 44 above it.
RAIL_ITEM_SPACING is Spacing, not Target1A 2 dp gap between rail items was classed as something a finger must hit.
Four docking/activity_bar.rs gaps are fixed, not scaled4See the activity-rail note in §3b: the same two constants feed the rail's layout, its overflow-capacity estimate and its drop-insertion geometry, two of them from pure functions with their own unit tests and no theme in scope. Scaling one without the others makes the rail's capacity disagree with its layout — a worse outcome than a rail whose gaps do not grow. Owner for any future change: P30.
Seven rows pointed at files the module split had emptied7EDGE / MAX_VELOCITY in list_view.rs, table_view.rs, tree_table_view.rs now live in each view's widget_impl.rs, and MEAN_ADVANCE_OVER_LINE_HEIGHT moved to rich_text/body.rs. The paths are corrected; the five auto-scroll copies are now deleted, folded into common::drag_autoscroll.
SPLITTER_MIN_PANE_SIZE and RESIZE_MIN_EDGE are container clamps2Both are minimum content extents (96 dp and 24 dp) read where no theme is in scope, and dp(.., Grab, ..) is the identity for both at every density. Classed Decoration with the reason written at the row.

Corrections P25 made to this document

Every count above survived. What did not is the assumption behind them: a projected recipe field is only a projection if something reads it. Four consumers measured against the raw Compact constant while the recipe beside them carried the projected value, so the ladder was inert for four of the most common targets in a real application.

CorrectionWhereWhy it mattered
StandardItemRecipe::min_height_single_line / min_height_two_line had no reader at allstandard_item.rs, StandardListItem::layout_responseEvery ListView / TreeView row measured itself against the raw 28 / 44 dp, so a Touch build laid out 28 dp rows under a theme that had already decided on 44. The two projected fields were dead.
CalendarRecipe::nav_arrow_size was not read by the arrowscalendar/header.rs, NavArrow::build and its layout_responseThe header's chevrons stayed 24 dp at Touch while the day cells beside them grew — a strip whose two halves followed different ladders.
MenuItemRecipe::item_height was not read by the ComboBoxcombo_box/item.rs, DropdownItem::layout_response; combo_box/panel.rs, build_virtualized_listA combo box's own list stayed 24 dp while a MenuList's rows reached 44, and the panel sizing itself for max_visible_items used the same raw number, so the two at least agreed while both were wrong.
The completion popup had no projection at allcode_editor/completion.rsIts rows are menu rows in every other respect. Now floored through density_min_size, which is the §0 site above.
A Target classed "visual fixed; hit via partition_targets" that is not an in-node splitsplit_button.rs, SPLIT_BUTTON_CHEVRON_WIDTHThe mechanism named in the row could not be implemented as written: the chevron is its own node beside its own sibling, and partitioning a node's rectangle only makes sense when one node paints both zones. The row now names hit_outset.

One refusal, with its measurement

docking/activity_bar.rs's item_extent maps an IconButtonSize to a rail item's square extent by reading the raw ICON_BUTTON_SIZE_* constants, and P25 left it that way. The reason is the one already recorded for the rail's gaps: the same function feeds the strip's layout, its overflow-capacity estimate and its drop-insertion geometry, two of them pure functions with their own unit tests and no theme in scope, and projecting one without the others makes the rail's capacity disagree with its layout. What the projection would buy is comfort, not reach — every IconButtonSize a rail can carry (24 / 24 / 30 / 40 / 50 dp) already clears min_target_conformance, which is 24 dp at every density, and the rail's default is 40. Owner for any future change: whoever revisits the rail's geometry as a whole.

Corrections P40 made to this document

The target-conformance audit measures a target's reachable extent rather than its painted one, so it is the first reader of this document that could not take a named mechanism on trust: a row naming a mechanism that does not exist measures short and the gate says so. Five rows below were wrong, in three ways — two named a mechanism the code could not implement, two named one that is implemented and does not deliver, and one understated a floor. The first two are the same failure P25 recorded for SPLIT_BUTTON_CHEVRON_WIDTHa mechanism named in the treatment column that the code could not implement as written — which makes it the failure mode the next reader of this table should look for first.

CorrectionWhereWhy it mattered
The SpinBox step buttons are reached by nothing, and partition_targets was never a candidatespin_box.rs, build_step_buttons; spin_box/step_button.rs, StepButton::newpartition_targets carves one node's rectangle into zones, so it can only be the mechanism where a single node paints both. The two step buttons are their own nodes stacked beside their own sibling, exactly as the SplitButton chevron is its own node beside its own — P25's correction, recurring. Naming the wrong mechanism hid a real gap behind a plausible sentence: nothing reaches these buttons. An outset cannot (it never escapes its parent, and the parent is a column exactly one button wide and two buttons tall, so the space it would claim vertically is the other step's); the miss-only pass cannot (the field beside them takes presses of its own, so an eligible bubble owner sits at distance zero); and TouchTarget cannot while the pair is stacked inside the field's own height. The row now says so, and step_button.rs had already said it at the code. This is an allow-listed WCAG 2.2 SC 2.5.8 failure at every density, conforming by SC 2.5.8 Equivalent — the same value is set by typing in the field, by Up/Down and PageUp/PageDown, by the wheel, and by the Increment / Decrement assistive actions. Closing it geometrically means changing the layout (a side-by-side −/+ at coarse densities), which is a design decision and not a targeting one.
TAB_CLOSE_BUTTON_SIZE is not reached by partition_targets either, and nothing reads itrecipe_tab_style.rs; the affordance is built in tab_widget/header.rsThe row promised an in-node split on the tab, and P25 had already refused that for this exact affordance with the measurement: a tab's close × is a real IconButton node at IconButtonSize::Compact, so there is no single rectangle to carve. The correction P25 wrote into docs/widget-pointer-inventory.md was never carried back to this table — the twin left standing. Worse, close_button_size has no reader anywhere in the workspace (the field is set by the IntUI recipe and by the Fluent and macOS presets, and read by nothing), so the 16 dp it names sizes nothing at all. The affordance a finger has to hit is the IconButton, which clears the floor at Compact and follows the ladder. What that affordance does have is a reveal problem, not a size one, and it belongs to the hover census.
The tree chevron's hit_outset is declared and inertrecipe_standard_item_style.rs, STANDARD_ITEM_CHEVRON_COLUMN_WIDTH; the wrapper is in standard_item.rs, StandardTreeItem::buildThe row named hit_outset, and the hook is implemented — but build wraps the chevron in FixedSize::new().width(chevron_size), a wrapper exactly its own size on both axes, and an outset is only ever offered points every ancestor's rectangle already contains. Measured: 16 × 16 in a TreeView at all three densities, reach equal to paint, no mechanism credited, while the same chevron in a bare row reaches 24 × 24. This is A10's reach limit, recorded there from the inspector's resize strip and now measured in a shipped widget. Deleting the wrapper is necessary and not sufficient — the reach becomes 20 × 20 / 24 × 18.8 / 30 × 17.6, still short at Compact, because at depth 0 the chevron is flush against the row's content box. Allow-listed in the gate with an owner; pinned by the_chevrons_outset_is_inert_inside_a_standard_tree_row.
A grab ring can reach past a neighbouring target's centre, and at Touch the dock gutter's doesdocking.rs, DOCK_GUTTER; the hook is in docking/resize_handle.rs, DockResizeHandle::hit_outsetThe row's treatment ("grab via hit_outset, 24 dp, 44 at Touch") is true and incomplete: the gutter inflates to TargetRole::Target, so at Touch its ring is ±19 dp, and the dock tab strip begins 0 dp below it. Measured: the strip's header reaches 0 × 0 at Touch and is reachable at Compact, where the ring is ±9. A10's precedence chain settles an outset against another outset by distance to the uninflated rectangle and says nothing about an outset against a plain target that contains the point — the gap is in the mechanism, not in this row, but the row is where a reader meets the number. The splitter gutter one row up declares the same ring; nothing was measured against it, because the panes on either side of it in the fixture take no press.
The clear button is no longer a Compact-visible MinSize exceptiontext_input.rs, TextInput::build; the §0 table and the §1 row for its old call site§0 listed the clear button as raised from 16 dp to a 24 dp box, and §1 listed the MinSize::new(16.0, 16.0) that did it. Neither is in the code: the slot is a HitTarget::fixed(16.0, 16.0) declaring a hit_outset, which is the whole point of the arrangement (text_input.rs's module doc: "raising its box would widen every field in the workspace at Compact"). Measured: the slot paints 16 × 16 and reaches 24 × 24 at Compact, and reaching 22 × 24 instead is what reverting arena.rs's won_through_outset costs — pinned by an_outsets_claim_survives_the_slop_pass_in_the_shipped_controls. The row mattered because everything in this document, the target-conformance gate's allow-list included, defers to §0 as the enumeration of Compact-visible exceptions: a row that no longer changes Compact inflates that count for every later reader.
The table header's zone floor is the density's target_size, not a fixed 24 dptable_view/header.rs, HeaderCell::build and header_cell_zonesThe paragraph under the table said "a 24 dp floor per zone". HeaderCell::build reads ctx.theme().input.target_size, so the floor is 24 / 32 / 44 — understating it made the one row where partition_targets genuinely is the mechanism look like the only one that does not follow the ladder. The same paragraph cited header.rs:529 for where filter_zone_width is read; that line now holds unrelated code, and the two real readers are named by function instead.

Dimensions that are not constants

Three dimensions the audit flagged were inline literals with no constant to rename. P20 introduced one for each; all three are below the 24 dp floor, so the constant names a painted extent that stays put at every density, and the treatment column says which hit mechanism — if any — makes up the shortfall.

This table's second column names the function, not a line: of 34 line citations in one earlier artifact exactly one still resolved 36 packages later, and two of the four rows P40 rewrote below carried an off-by-one. A function name survives a refactor that renumbers a file, which is the same reason TargetMeasurement::path is a chain of type names.

FileSiteDimensionValueClassP20 treatment
crates/teksilo-widgets/src/title_bar/window_frame.rsWindowFrame::newresize-strip thickness field default6.0Grabnamed WINDOW_FRAME_RESIZE_THICKNESS; visual fixed at 6 dp, grab via hit_outset (24 dp, 44 at Touch) — and the corner grips on the same hook reach nothing, which is an allow-listed finding in the target-conformance gate, pinned by a_window_corner_grip_is_boxed_in_by_its_own_edge_strips
crates/teksilo-widgets/src/spin_box.rsbuild_step_buttonsbutton_width for the step buttons18.0Targetnamed SPIN_BOX_STEP_BUTTON_WIDTH; visual fixed at 18 dp, and no hit mechanism reaches it — an allow-listed SC 2.5.8 failure, conformance by Equivalent (corrected by P40 — see Corrections P40)
crates/teksilo-widgets/src/spin_box/step_button.rsStepButton::newstep-button width18.0Targetnamed SPIN_BOX_STEP_BUTTON_WIDTH; visual fixed at 18 dp, and no hit mechanism reaches it — an allow-listed SC 2.5.8 failure, conformance by Equivalent (corrected by P40 — see Corrections P40)

table_view/header.rs splits one header cell into a label zone and a filter zone by coordinate inside a single node (filter_zone_width, read in HeaderCell::build and in HeaderCell::target_regions); it has no dp constant at all and is handled by core::partition_targets through one header_cell_zones function, not by a density projection. Its floor per zone is the density's target_size — 24 dp at Compact, 32 and 44 above it — read once in HeaderCell::build and cached, because a density change marks the tree at BindingLevel::Rebuild. It is not a fixed 24 dp.

§1 — MinSize::new call sites

29 production sites. Every one is a hit-area or control-height floor; each becomes density_min_size(base, axes, &tokens) under P20, except the three marked Decoration.

FileLineExpressionCompact valueClassP20 treatment
crates/teksilo-preview-ui/src/navigator.rs138MinSize::new(0.0, 28.0)28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-preview-ui/src/navigator.rs192MinSize::new(0.0, 22.0)22Targetscales with target_sizebelow the 24 dp AA floor today
crates/teksilo-theme-fluent/src/styles/button.rs96MinSize::new(0.0, MIN_HEIGHT)32Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-theme-fluent/src/styles/text_input.rs83MinSize::new(0.0, MIN_HEIGHT)32Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-theme-macos/src/styles/button.rs107MinSize::new(0.0, MACOS_CONTROL_HEIGHT)22Targetscales with target_sizebelow the 24 dp AA floor today
crates/teksilo-theme-macos/src/styles/text_input.rs81MinSize::new(0.0, MACOS_CONTROL_HEIGHT)22Targetscales with target_sizebelow the 24 dp AA floor today
crates/teksilo-widgets/src/accordion.rs464MinSize::new(ACCORDION_FILL_HEADER_EXTENT, 0.0)30Targetscales with target_size (horizontal dock strip) — accordion_fill_header_extent(&InputTokens)
crates/teksilo-widgets/src/accordion.rs466MinSize::new(0.0, ACCORDION_FILL_HEADER_EXTENT)30Targetscales with target_sizeaccordion_fill_header_extent(&InputTokens)
crates/teksilo-widgets/src/checkbox.rs408MinSize::new(hit, hit) from CHECKBOX_BOX_HIT_AREA24Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/command_link_button.rs322MinSize::new(0.0, COMMAND_LINK_BUTTON_MIN_HEIGHT)64Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/date_range_edit.rs602MinSize::new(0.0, field_dims::TEXT_FIELD_HEIGHT)28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/date_time_edit.rs737MinSize::new(0.0, field_dims::TEXT_FIELD_HEIGHT)28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/docking/panel.rs989MinSize::new(0.0, ACCORDION_FILL_HEADER_EXTENT)30Targetscales with target_sizeaccordion::accordion_fill_header_extent(&InputTokens)
crates/teksilo-widgets/src/password_field.rs519MinSize::new(24.0, 24.0) (reveal toggle)24Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/password_field.rs576MinSize::new(min_w, field_dims::TEXT_FIELD_HEIGHT)28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/radio_button.rs270MinSize::new(RADIO_HIT_AREA, RADIO_HIT_AREA)24Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/search_field.rs554MinSize::new(0.0, 0.0)0Decorationfixed — a zero floor used as a layout pass-through, not a target
crates/teksilo-widgets/src/split_button.rs617MinSize::new(SPLIT_BUTTON_MIN_WIDTH, SPLIT_BUTTON_HEIGHT)72 × 24Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/spin_box.rs1224MinSize::new(min_width, field_dims::TEXT_FIELD_HEIGHT)28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/styles/recipe_button_style.rs141MinSize::new(recipe.min_size.width, recipe.min_size.height)72 × 24Targetscales with target_size — the one recipe-driven site
crates/teksilo-widgets/src/styles/recipe_combo_box_style.rs96MinSize::new(0.0, height) from COMBO_BOX_HEIGHT28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/styles/recipe_combo_box_style.rs172MinSize::new(0.0, height) from COMBO_BOX_HEIGHT28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/styles/recipe_split_button_style.rs85MinSize::new(total_min_width, SPLIT_BUTTON_HEIGHT)24Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/styles/recipe_text_input_style.rs117MinSize::new(0.0, height) from TEXT_FIELD_HEIGHT28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/styles/recipe_text_input_style.rs175MinSize::new(0.0, height) from TEXT_FIELD_HEIGHT28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/text_input.rsTextInput::build (was line 746)MinSize::new(16.0, 16.0) (clear button) — call site removed16Targetthe MinSize is gone: the slot is now crate::button::HitTarget::fixed(16.0, 16.0) declaring a Widget::hit_outset, so the paint stays 16 dp at every density and the 24 dp target is made up between the pointer and the arena (corrected by P40 — see Corrections P40)
crates/teksilo-widgets/src/text_input.rs810MinSize::new(min_w, field_dims::TEXT_FIELD_HEIGHT)28Targetscales with target_sizedensity_min_size(.., &InputTokens)
crates/teksilo-widgets/src/tool_box.rs722MinSize::new(TOOL_BOX_HEADER_MIN_HEIGHT, 0.0)28Targetscales with target_size (rotated header) — density_min_size(.., &InputTokens)
crates/teksilo-widgets/src/tool_box.rs724MinSize::new(0.0, TOOL_BOX_HEADER_MIN_HEIGHT)28Targetscales with target_sizedensity_min_size(.., &InputTokens)

Excluded and why: crates/teksilo-widgets/src/button.rs:1287, :1288, crates/teksilo-widgets/src/popover_widget.rs:907, crates/teksilo-widgets/src/primitives/min_size.rs:226, :238, crates/teksilo-widgets/src/scroll_bar.rs:868 (inline #[cfg(test)] modules); crates/teksilo-widgets/src/combo_box/tests.rs:1167, :1201, crates/teksilo-widgets/src/layout_integration_tests.rs:138 (test files); crates/teksilo-widgets/src/primitives/min_size.rs:22, crates/teksilo-widgets/src/scroll_area.rs:25 (doc comments). One further production site lives outside the crates tree, in examples/widget_catalog/src/tabs/layout.rs:244.

§2 — the 39 default recipes

Every themable widget's Compact dimensions are module constants in its recipe_*_style.rs. Under P20 each Recipe*Style gains for_tokens(&InputTokens) -> Self; Default stays and equals for_tokens(&InputTokens::for_density(Compact)), so these values are the Compact column by construction.

Exactly one recipe carries a min_size field: recipe_button_style.rs, on ButtonRecipe, set to Size::new(72.0, 24.0) by all three variant constructors (lines 267, 298, 325) and consumed at line 141. Every other recipe expresses its target as a bare height/size constant, which is why P20 cannot go through min_size alone.

§2.1 — fields per recipe

Recipe fileDimension fields it carriesCount
recipe_avatar_style.rsAVATAR_SIZE_SMALL, AVATAR_SIZE_MEDIUM, AVATAR_SIZE_LARGE, AVATAR_SIZE_X_LARGE, AVATAR_BORDER_DEFAULT, AVATAR_PRESENCE_DIAMETER_RATIO, AVATAR_PRESENCE_DIAMETER_MIN, AVATAR_PRESENCE_DIAMETER_MAX, AVATAR_PRESENCE_OUTLINE_WIDTH, AVATAR_PRESENCE_INSET, AVATAR_FONT_RATIO_1CHAR, AVATAR_FONT_RATIO_2CHAR, AVATAR_ROUNDED_RADIUS_RATIO13
recipe_badge_style.rsBADGE_PADDING_HORIZONTAL, BADGE_PADDING_VERTICAL, BADGE_CORNER_RADIUS3
recipe_banner_style.rsBANNER_PADDING_HORIZONTAL, BANNER_PADDING_VERTICAL, BANNER_CORNER_RADIUS, BANNER_GLYPH_SIZE, BANNER_CONTENT_GAP, BANNER_TITLE_DESCRIPTION_GAP6
recipe_button_style.rsBUTTON_HEIGHT, BUTTON_MIN_WIDTH, BUTTON_PADDING_HORIZONTAL, BUTTON_PADDING_VERTICAL, BUTTON_CORNER_RADIUS, BUTTON_BORDER_WIDTH, BUTTON_ICON_SIZE, BUTTON_ICON_LABEL_GAP8
recipe_calendar_style.rsCALENDAR_OUTER_PADDING, CALENDAR_SECTION_GAP, CALENDAR_HEADER_HEIGHT, CALENDAR_WEEKDAY_ROW_HEIGHT, CALENDAR_CELL_SIZE, CALENDAR_CELL_RADIUS, CALENDAR_CELL_GAP, CALENDAR_TODAY_RING_WIDTH, CALENDAR_NAV_ICON_SIZE, CALENDAR_WEEK_NUMBER_COLUMN_WIDTH, CALENDAR_NAV_ARROW_SIZE, CALENDAR_NAV_ARROW_RADIUS, CALENDAR_HEADER_GAP, CALENDAR_ZOOM_CELL_RADIUS14
recipe_card_style.rsCARD_PADDING, CARD_CORNER_RADIUS, CARD_BORDER_WIDTH, CARD_SHADOW_DENSITY4
recipe_checkbox_style.rsCHECKBOX_BOX_VISUAL_SIZE, CHECKBOX_BOX_HIT_AREA, CHECKBOX_LABEL_GAP, CHECKBOX_CORNER_RADIUS4
recipe_color_picker_style.rsCANVAS_WIDTH, CANVAS_HEIGHT, CANVAS_CORNER_RADIUS, STRIP_THICKNESS, STRIP_LENGTH, STRIP_CORNER_RADIUS, INDICATOR_RADIUS, INDICATOR_OUTER_STROKE_WIDTH, INDICATOR_INNER_STROKE_WIDTH, STRIP_THUMB_WIDTH, STRIP_THUMB_HEIGHT, STRIP_THUMB_CORNER_RADIUS, PADDING, GAP, SWATCH_SIZE, SWATCH_SPACING, SWATCH_CORNER_RADIUS, SWATCH_SELECTED_STROKE_WIDTH, CHECKER_CELL, PREVIEW_WIDTH, PREVIEW_HEIGHT, PREVIEW_CORNER_RADIUS, SPINNER_FIELD_WIDTH, HEX_FIELD_WIDTH24
recipe_combo_box_style.rsCOMBO_BOX_HEIGHT, COMBO_BOX_PADDING_HORIZONTAL, COMBO_BOX_ARROW_COLUMN_WIDTH, COMBO_BOX_CORNER_RADIUS4
recipe_date_edit_style.rsCALENDAR_BUTTON_WIDTH, CALENDAR_ICON_SIZE, SEGMENT_GAP3
recipe_dialog_style.rsDIALOG_CONTENT_PADDING, DIALOG_MIN_WIDTH, DIALOG_CORNER_RADIUS3
recipe_drop_target_style.rsDROP_TARGET_CORNER_RADIUS, DROP_TARGET_BORDER_WIDTH_DEFAULT, DROP_TARGET_BORDER_WIDTH_PROMINENT, DROP_TARGET_BORDER_WIDTH_SUBTLE4
recipe_drop_zone_style.rsDROP_ZONE_CORNER_RADIUS, DROP_ZONE_BORDER_WIDTH, DROP_ZONE_PADDING3
recipe_grid_view_style.rs(none — see §2.1)0
recipe_icon_button_style.rsICON_BUTTON_SIZE_COMPACT, ICON_BUTTON_SIZE_DEFAULT, ICON_BUTTON_SIZE_TOOLBAR, ICON_BUTTON_SIZE_LARGE, ICON_BUTTON_SIZE_HERO, ICON_BUTTON_ICON_SIZE, ICON_BUTTON_ICON_SIZE_TOOLBAR, ICON_BUTTON_ICON_SIZE_LARGE, ICON_BUTTON_ICON_SIZE_HERO, ICON_BUTTON_CORNER_RADIUS10
recipe_link_style.rsLINK_CORNER_RADIUS, LINK_UNDERLINE_THICKNESS2
recipe_list_container_style.rs(none — see §2.1)0
recipe_menu_item_style.rsMENU_ITEM_HEIGHT, MENU_ITEM_PADDING_HORIZONTAL, MENU_ITEM_PADDING_LEADING, MENU_ICON_COLUMN_WIDTH, MENU_ICON_LABEL_GAP, MENU_SHORTCUT_LEFT_GAP, MENU_SEPARATOR_HEIGHT, MENU_ITEM_CORNER_RADIUS8
recipe_panel_style.rsPANEL_PADDING, PANEL_CORNER_RADIUS, PANEL_BORDER_WIDTH3
recipe_popover_style.rsPOPOVER_PADDING, POPOVER_CORNER_RADIUS, POPOVER_BORDER_WIDTH, MENU_POPUP_CORNER_RADIUS, POPOVER_SHADOW_DENSITY5
recipe_progress_bar_style.rsPROGRESS_BAR_CORNER_RADIUS1
recipe_radio_style.rsRADIO_VISUAL_SIZE, RADIO_HIT_AREA, RADIO_LABEL_GAP, RADIO_INNER_DOT_SIZE4
recipe_radio_tile_style.rsRADIO_TILE_CORNER_RADIUS, RADIO_TILE_PADDING, RADIO_TILE_BORDER_WIDTH, RADIO_TILE_SELECTED_BORDER_WIDTH, RADIO_TILE_FOCUS_RING_WIDTH, RADIO_TILE_SHADOW_DENSITY, RADIO_TILE_VERTICAL_ROW_HEIGHT7
recipe_rich_text_editor_style.rs(none — see §2.1)0
recipe_scroll_bar_style.rsSCROLLBAR_THICKNESS_IDLE, SCROLLBAR_THICKNESS_HOVER, SCROLLBAR_MIN_THUMB_LENGTH, SCROLLBAR_CORNER_RADIUS, OVERRIDE_THUMB_ALPHA_IDLE, OVERRIDE_THUMB_ALPHA_HOVER, OVERRIDE_THUMB_ALPHA_PRESSED, OVERRIDE_TRACK_ALPHA8
recipe_search_field_style.rsGLYPH_SIZE, GLYPH_SLOT_WIDTH, INPUT_PANEL_GAP, PANEL_PADDING, PANEL_CORNER_RADIUS, ROW_CORNER_RADIUS, ROW_PADDING_HORIZONTAL, ROW_PADDING_VERTICAL, ROW_HEIGHT9
recipe_segmented_control_style.rsSEGMENTED_CONTROL_HEIGHT, SEGMENTED_CONTROL_PADDING_HORIZONTAL, SEGMENTED_CONTROL_PADDING_VERTICAL, SEGMENTED_CONTROL_CORNER_RADIUS, SEGMENTED_CONTROL_BORDER_WIDTH5
recipe_slider_style.rsMIN_CROSS_SIZE, SLIDER_TRACK_HEIGHT, SLIDER_THUMB_DIAMETER, SLIDER_TICK_SIZE4
recipe_snackbar_style.rsSNACKBAR_PADDING_HORIZONTAL, SNACKBAR_PADDING_VERTICAL, SNACKBAR_CORNER_RADIUS3
recipe_spin_box_style.rs(none — see §2.1)0
recipe_split_button_style.rs(none — see §2.1)0
recipe_splitter_style.rsSPLITTER_DIVIDER_LINE_THICKNESS, HOVER_DWELL_DELAY_FRAC2
recipe_standard_item_style.rsSTANDARD_ITEM_ICON_SIZE, STANDARD_ITEM_SUBTITLE_ICON_SIZE, STANDARD_ITEM_SLOT_GAP, STANDARD_ITEM_SUBTITLE_SLOT_GAP, STANDARD_ITEM_LABEL_SUBTITLE_GAP, STANDARD_ITEM_PADDING_HORIZONTAL, STANDARD_ITEM_PADDING_VERTICAL, STANDARD_ITEM_MIN_HEIGHT_SINGLE_LINE, STANDARD_ITEM_MIN_HEIGHT_TWO_LINE, STANDARD_ITEM_LABEL_COLUMN_MIN_WIDTH, STANDARD_ITEM_CHEVRON_COLUMN_WIDTH, STANDARD_ITEM_TREE_INDENT_STEP, STANDARD_ITEM_ITEM_CORNER_RADIUS, STANDARD_ITEM_BG_HORIZONTAL_INSET, STANDARD_ITEM_FOCUS_RING_WIDTH, STANDARD_ITEM_SELECTION_EDGE_WIDTH16
recipe_tab_style.rsTAB_EDITOR_HEIGHT, TAB_TOOL_WINDOW_HEIGHT, TAB_PADDING_HORIZONTAL, TAB_UNDERLINE_ACTIVE, TAB_UNDERLINE_HOVER, TAB_CLOSE_BUTTON_SIZE, DROP_INDICATOR_WIDTH7
recipe_table_style.rsROW_HEIGHT, HEADER_HEIGHT, CELL_PADDING_HORIZONTAL, CELL_PADDING_VERTICAL, RESIZE_HANDLE_WIDTH, COLUMN_RESIZE_STEP, GRID_LINE_THICKNESS, CORNER_RADIUS, SORT_INDICATOR_SIZE, FILTER_INDICATOR_SIZE, HEADER_INTER_CELL_SPACING, FOCUS_RING_INSET, MIN_COLUMN_WIDTH_DEFAULT, TREE_INDENT_PER_LEVEL, TREE_TWIST_SIZE, TREE_TWIST_LABEL_GAP16
recipe_text_input_style.rsTEXT_FIELD_HEIGHT, TEXT_FIELD_PADDING_HORIZONTAL, TEXT_FIELD_PADDING_VERTICAL, TEXT_FIELD_BORDER_WIDTH, TEXT_FIELD_CORNER_RADIUS, TEXT_FIELD_CARET_WIDTH, TEXT_FIELD_VALIDATION_STRIP_GAP7
recipe_toast_style.rsTOAST_PADDING_HORIZONTAL, TOAST_PADDING_VERTICAL, TOAST_CORNER_RADIUS, TOAST_GLYPH_SIZE, TOAST_CONTENT_GAP, TOAST_TITLE_BODY_GAP, TOAST_BODY_ACTIONS_GAP7
recipe_toggle_style.rsTOGGLE_TRACK_WIDTH, TOGGLE_TRACK_HEIGHT, TOGGLE_THUMB_DIAMETER, TOGGLE_THUMB_INSET4
recipe_tooltip_style.rsTOOLTIP_PADDING_HORIZONTAL, TOOLTIP_PADDING_VERTICAL, TOOLTIP_CORNER_RADIUS, TOOLTIP_MAX_WIDTH, TOOLTIP_SHADOW_DENSITY, COMPOSITE_TOOLTIP_PADDING_HORIZONTAL, COMPOSITE_TOOLTIP_PADDING_VERTICAL, COMPOSITE_TOOLTIP_CORNER_RADIUS, COMPOSITE_TOOLTIP_MAX_WIDTH, COMPOSITE_TOOLTIP_MAX_HEIGHT, COMPOSITE_TOOLTIP_SHADOW_DENSITY11

Five recipes carry no dimension constant of their own: recipe_grid_view_style.rs (colours + a focus-ring width described in prose only), recipe_list_container_style.rs (surface fill only), recipe_rich_text_editor_style.rs and recipe_spin_box_style.rs (both re-export recipe_text_input_style as field_dims and reuse TEXT_FIELD_*), and recipe_split_button_style.rs (reuses the SPLIT_BUTTON_* constants that live in split_button.rs, §3a).

§2.2 — every recipe constant

FileLineIdentifierValueClassP20 treatment
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs39AVATAR_SIZE_SMALL24.0Targetscales with target_sizeAvatarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs40AVATAR_SIZE_MEDIUM32.0Targetscales with target_sizeAvatarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs41AVATAR_SIZE_LARGE48.0Targetscales with target_sizeAvatarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs42AVATAR_SIZE_X_LARGE64.0Targetscales with target_sizeAvatarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs46AVATAR_BORDER_DEFAULT2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs49AVATAR_PRESENCE_DIAMETER_RATIO0.28— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs50AVATAR_PRESENCE_DIAMETER_MIN8.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs51AVATAR_PRESENCE_DIAMETER_MAX20.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs53AVATAR_PRESENCE_OUTLINE_WIDTH1.5Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs55AVATAR_PRESENCE_INSET0.0Spacingscales with spacing_factorAvatarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs58AVATAR_FONT_RATIO_1CHAR0.45— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs59AVATAR_FONT_RATIO_2CHAR0.40— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_avatar_style.rs62AVATAR_ROUNDED_RADIUS_RATIO0.25— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_badge_style.rs25BADGE_PADDING_HORIZONTAL6.0Spacingscales with spacing_factorBadgeRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_badge_style.rs26BADGE_PADDING_VERTICAL1.0Spacingscales with spacing_factorBadgeRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_badge_style.rs29BADGE_CORNER_RADIUS9999.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_banner_style.rs30BANNER_PADDING_HORIZONTAL12.0Spacingscales with spacing_factorBannerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_banner_style.rs31BANNER_PADDING_VERTICAL10.0Spacingscales with spacing_factorBannerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_banner_style.rs32BANNER_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_banner_style.rs35BANNER_GLYPH_SIZE16.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_banner_style.rs38BANNER_CONTENT_GAP10.0Spacingscales with spacing_factorBannerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_banner_style.rs41BANNER_TITLE_DESCRIPTION_GAP2.0Spacingscales with spacing_factorBannerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_button_style.rs38BUTTON_HEIGHT24.0Targetscales with target_sizeRecipeButtonStyle::for_tokens
crates/teksilo-widgets/src/styles/recipe_button_style.rs39BUTTON_MIN_WIDTH72.0Targetscales with target_sizeRecipeButtonStyle::for_tokens
crates/teksilo-widgets/src/styles/recipe_button_style.rs40BUTTON_PADDING_HORIZONTAL14.0Spacingscales with spacing_factorRecipeButtonStyle::for_tokens
crates/teksilo-widgets/src/styles/recipe_button_style.rs41BUTTON_PADDING_VERTICAL0.0Spacingscales with spacing_factorRecipeButtonStyle::for_tokens
crates/teksilo-widgets/src/styles/recipe_button_style.rs42BUTTON_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_button_style.rs43BUTTON_BORDER_WIDTH1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_button_style.rs44BUTTON_ICON_SIZE16.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_button_style.rs45BUTTON_ICON_LABEL_GAP4.0Spacingscales with spacing_factorRecipeButtonStyle::for_tokens
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs42CALENDAR_OUTER_PADDING8.0Spacingscales with spacing_factorCalendarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs44CALENDAR_SECTION_GAP4.0Spacingscales with spacing_factorCalendarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs46CALENDAR_HEADER_HEIGHT28.0Targetscales with target_sizeCalendarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs48CALENDAR_WEEKDAY_ROW_HEIGHT20.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs50CALENDAR_CELL_SIZE32.0Targetscales with target_sizeCalendarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs52CALENDAR_CELL_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs54CALENDAR_CELL_GAP0.0Spacingscales with spacing_factorCalendarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs56CALENDAR_TODAY_RING_WIDTH1.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs58CALENDAR_NAV_ICON_SIZE12.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs60CALENDAR_WEEK_NUMBER_COLUMN_WIDTH28.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs62CALENDAR_NAV_ARROW_SIZE24.0Targetscales with target_sizeCalendarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs64CALENDAR_NAV_ARROW_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs66CALENDAR_HEADER_GAP4.0Spacingscales with spacing_factorCalendarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_calendar_style.rs68CALENDAR_ZOOM_CELL_RADIUS6.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_card_style.rs32CARD_PADDING16.0Spacingscales with spacing_factorCardRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_card_style.rs33CARD_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_card_style.rs34CARD_BORDER_WIDTH1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_card_style.rs36CARD_SHADOW_DENSITY0.5— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_checkbox_style.rs30CHECKBOX_BOX_VISUAL_SIZE19.0Decorationfixed — visual box; the target is CHECKBOX_BOX_HIT_AREA
crates/teksilo-widgets/src/styles/recipe_checkbox_style.rs31CHECKBOX_BOX_HIT_AREA24.0Targetscales with target_sizeCheckboxRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_checkbox_style.rs32CHECKBOX_LABEL_GAP6.0Spacingscales with spacing_factorCheckboxRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_checkbox_style.rs33CHECKBOX_CORNER_RADIUS3.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs27CANVAS_WIDTH224.0Targetscales with target_sizeColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs28CANVAS_HEIGHT192.0Targetscales with target_sizeColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs29CANVAS_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs32STRIP_THICKNESS14.0Grabvisual fixed at 14 dp — the thumb is the grab target, not the strip; hit via target_regions
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs33STRIP_LENGTH192.0Targetscales with target_sizeColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs34STRIP_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs37INDICATOR_RADIUS7.0Grabvisual fixed; hit via target_regions on the HSV canvas indicator
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs38INDICATOR_OUTER_STROKE_WIDTH1.5Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs39INDICATOR_INNER_STROKE_WIDTH1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs44STRIP_THUMB_WIDTH18.0Grabvisual fixed; hit via target_regions (24 dp, 44 at Touch)
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs45STRIP_THUMB_HEIGHT8.0Grabvisual fixed; hit via target_regions (24 dp, 44 at Touch)
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs46STRIP_THUMB_CORNER_RADIUS2.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs49PADDING12.0Spacingscales with spacing_factorColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs50GAP10.0Spacingscales with spacing_factorColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs53SWATCH_SIZE22.0Targetvisual fixed at 22 dp (below the floor); coarse hit via hit_outset
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs54SWATCH_SPACING6.0Spacingscales with spacing_factorColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs55SWATCH_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs56SWATCH_SELECTED_STROKE_WIDTH2.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs60CHECKER_CELL6.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs66PREVIEW_WIDTH64.0Targetscales with target_sizeColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs67PREVIEW_HEIGHT28.0Targetscales with target_sizeColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs68PREVIEW_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs71SPINNER_FIELD_WIDTH56.0Targetscales with target_sizeColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_color_picker_style.rs72HEX_FIELD_WIDTH96.0Targetscales with target_sizeColorPickerRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_combo_box_style.rs42COMBO_BOX_HEIGHT28.0Targetscales with target_sizeComboBoxRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_combo_box_style.rs43COMBO_BOX_PADDING_HORIZONTAL9.0Spacingscales with spacing_factorComboBoxRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_combo_box_style.rs44COMBO_BOX_ARROW_COLUMN_WIDTH23.0Decorationfixed — an in-node column inside the combo box's own target, not a target itself
crates/teksilo-widgets/src/styles/recipe_combo_box_style.rs45COMBO_BOX_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_date_edit_style.rs23CALENDAR_BUTTON_WIDTH24.0Targetscales with target_sizeDateEditRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_date_edit_style.rs25CALENDAR_ICON_SIZE14.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_date_edit_style.rs28SEGMENT_GAP1.0Spacingscales with spacing_factorDateEditRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_dialog_style.rs31DIALOG_CONTENT_PADDING24.0Spacingscales with spacing_factorDialogRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_dialog_style.rs32DIALOG_MIN_WIDTH280.0Targetscales with target_sizeDialogRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_dialog_style.rs33DIALOG_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_drop_target_style.rs53DROP_TARGET_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_drop_target_style.rs55DROP_TARGET_BORDER_WIDTH_DEFAULT2.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_drop_target_style.rs57DROP_TARGET_BORDER_WIDTH_PROMINENT3.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_drop_target_style.rs59DROP_TARGET_BORDER_WIDTH_SUBTLE1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_drop_zone_style.rs26DROP_ZONE_CORNER_RADIUS12.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_drop_zone_style.rs28DROP_ZONE_BORDER_WIDTH2.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_drop_zone_style.rs30DROP_ZONE_PADDING20.0Spacingscales with spacing_factorDropZoneRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs32ICON_BUTTON_SIZE_COMPACT24.0Targetscales with target_sizeIconButtonRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs33ICON_BUTTON_SIZE_DEFAULT24.0Targetscales with target_sizeIconButtonRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs34ICON_BUTTON_SIZE_TOOLBAR30.0Targetscales with target_sizeIconButtonRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs35ICON_BUTTON_SIZE_LARGE40.0Targetscales with target_sizeIconButtonRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs36ICON_BUTTON_SIZE_HERO50.0Targetscales with target_sizeIconButtonRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs37ICON_BUTTON_ICON_SIZE16.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs38ICON_BUTTON_ICON_SIZE_TOOLBAR18.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs39ICON_BUTTON_ICON_SIZE_LARGE24.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs40ICON_BUTTON_ICON_SIZE_HERO32.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_icon_button_style.rs41ICON_BUTTON_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_link_style.rs20LINK_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_link_style.rs21LINK_UNDERLINE_THICKNESS1.0Decorationfixed — hairline rule
crates/teksilo-widgets/src/styles/recipe_menu_item_style.rs33MENU_ITEM_HEIGHT24.0Targetscales with target_sizeMenuItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_menu_item_style.rs35MENU_ITEM_PADDING_HORIZONTAL12.0Spacingscales with spacing_factorMenuItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_menu_item_style.rs37MENU_ITEM_PADDING_LEADING6.0Spacingscales with spacing_factorMenuItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_menu_item_style.rs38MENU_ICON_COLUMN_WIDTH16.0Decorationfixed — glyph column; the row carries the target
crates/teksilo-widgets/src/styles/recipe_menu_item_style.rs39MENU_ICON_LABEL_GAP6.0Spacingscales with spacing_factorMenuItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_menu_item_style.rs40MENU_SHORTCUT_LEFT_GAP24.0Spacingscales with spacing_factorMenuItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_menu_item_style.rs41MENU_SEPARATOR_HEIGHT9.0Spacingscales with spacing_factorMenuItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_menu_item_style.rs43MENU_ITEM_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_panel_style.rs35PANEL_PADDING12.0Spacingscales with spacing_factorPanelRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_panel_style.rs36PANEL_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_panel_style.rs37PANEL_BORDER_WIDTH1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_popover_style.rs32POPOVER_PADDING16.0Spacingscales with spacing_factorPopoverRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_popover_style.rs33POPOVER_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_popover_style.rs34POPOVER_BORDER_WIDTH1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_popover_style.rs37MENU_POPUP_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_popover_style.rs39POPOVER_SHADOW_DENSITY0.5— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_progress_bar_style.rs32PROGRESS_BAR_CORNER_RADIUS2.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_radio_style.rs29RADIO_VISUAL_SIZE19.0Decorationfixed — visual dot; the target is RADIO_HIT_AREA
crates/teksilo-widgets/src/styles/recipe_radio_style.rs30RADIO_HIT_AREA24.0Targetscales with target_sizeRadioRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_radio_style.rs31RADIO_LABEL_GAP6.0Spacingscales with spacing_factorRadioRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_radio_style.rs32RADIO_INNER_DOT_SIZE7.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_radio_tile_style.rs41RADIO_TILE_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_radio_tile_style.rs42RADIO_TILE_PADDING14.0Spacingscales with spacing_factorRadioTileRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_radio_tile_style.rs43RADIO_TILE_BORDER_WIDTH1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_radio_tile_style.rs44RADIO_TILE_SELECTED_BORDER_WIDTH1.5Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_radio_tile_style.rs45RADIO_TILE_FOCUS_RING_WIDTH2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_radio_tile_style.rs47RADIO_TILE_SHADOW_DENSITY0.5— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_radio_tile_style.rs50RADIO_TILE_VERTICAL_ROW_HEIGHT44.0Targetscales with target_sizeRadioTileRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_scroll_bar_style.rs37SCROLLBAR_THICKNESS_IDLE4.0Grabvisual fixed; coarse grab via hit_outset (48 dp) + target_regions
crates/teksilo-widgets/src/styles/recipe_scroll_bar_style.rs38SCROLLBAR_THICKNESS_HOVER8.0Grabvisual fixed; coarse grab via hit_outset (48 dp) + target_regions
crates/teksilo-widgets/src/styles/recipe_scroll_bar_style.rs39SCROLLBAR_MIN_THUMB_LENGTH24.0Grabscales with target_size (24 dp Compact → 44 dp Touch) — ScrollBarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_scroll_bar_style.rs40SCROLLBAR_CORNER_RADIUS2.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_scroll_bar_style.rs47OVERRIDE_THUMB_ALPHA_IDLE0.50— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_scroll_bar_style.rs48OVERRIDE_THUMB_ALPHA_HOVER0.72— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_scroll_bar_style.rs49OVERRIDE_THUMB_ALPHA_PRESSED0.92— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_scroll_bar_style.rs50OVERRIDE_TRACK_ALPHA0.12— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_search_field_style.rs20GLYPH_SIZE14.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_search_field_style.rs23GLYPH_SLOT_WIDTH22.0Decorationfixed — glyph slot; the field carries the target
crates/teksilo-widgets/src/styles/recipe_search_field_style.rs26INPUT_PANEL_GAP2.0Spacingscales with spacing_factorSearchFieldRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_search_field_style.rs28PANEL_PADDING4.0Spacingscales with spacing_factorSearchFieldRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_search_field_style.rs30PANEL_CORNER_RADIUS6.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_search_field_style.rs32ROW_CORNER_RADIUS2.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_search_field_style.rs33ROW_PADDING_HORIZONTAL10.0Spacingscales with spacing_factorSearchFieldRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_search_field_style.rs34ROW_PADDING_VERTICAL4.0Spacingscales with spacing_factorSearchFieldRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_search_field_style.rs35ROW_HEIGHT26.0Targetscales with target_sizeSearchFieldRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_segmented_control_style.rs28SEGMENTED_CONTROL_HEIGHT24.0Targetprojected but unread — this row's original claim was half true. for_tokens really does yield height = 24 -> 44, but nothing reads recipe.height (recipe_combo_box_style.rs and recipe_text_input_style.rs read theirs; this one has no reader), and segmented_control.rs's layout_response floors on the raw SEGMENTED_CONTROL_HEIGHT const instead. Measured: 36 dp at all three densities. Same class as the four projected-but-unread recipe fields the P25 note records; conformance is separately measured by P40, which lists two segmented-control fixtures.
crates/teksilo-widgets/src/styles/recipe_segmented_control_style.rs29SEGMENTED_CONTROL_PADDING_HORIZONTAL12.0Spacingscales with spacing_factorSegmentedControlRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_segmented_control_style.rs30SEGMENTED_CONTROL_PADDING_VERTICAL6.0Spacingscales with spacing_factorSegmentedControlRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_segmented_control_style.rs31SEGMENTED_CONTROL_CORNER_RADIUS3.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_segmented_control_style.rs32SEGMENTED_CONTROL_BORDER_WIDTH1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_slider_style.rs30MIN_CROSS_SIZE24.0Targetfixed at every density — this row's original claim was false. It is a module-level const read directly in SliderBody::layout_response, not a recipe field, and SliderRecipe::for_tokens takes _tokens (provably unused). Measured through set_input_density: Slider is 24 dp at Compact, Comfortable AND Touch, where Button is 24/32/44. Conformance is not affected and is not this row's business: Slider declares target_regions and is a P40 fixture, so the gate measures its thumb by its declared region.
crates/teksilo-widgets/src/styles/recipe_slider_style.rs33SLIDER_TRACK_HEIGHT4.0Grabfixed — track is decoration; the thumb carries the target
crates/teksilo-widgets/src/styles/recipe_slider_style.rs34SLIDER_THUMB_DIAMETER14.0Grabvisual fixed; hit via SliderStyle::thumb_diameter_for(&self, cfg, &InputTokens) + target_regions (24/44 dp)
crates/teksilo-widgets/src/styles/recipe_slider_style.rs35SLIDER_TICK_SIZE2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_snackbar_style.rs26SNACKBAR_PADDING_HORIZONTAL12.0Spacingscales with spacing_factorSnackbarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_snackbar_style.rs27SNACKBAR_PADDING_VERTICAL10.0Spacingscales with spacing_factorSnackbarRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_snackbar_style.rs28SNACKBAR_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_splitter_style.rs28SPLITTER_DIVIDER_LINE_THICKNESS1.0Decorationfixed — hairline rule
crates/teksilo-widgets/src/styles/recipe_splitter_style.rs33HOVER_DWELL_DELAY_FRAC0.75— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs28STANDARD_ITEM_ICON_SIZE16.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs29STANDARD_ITEM_SUBTITLE_ICON_SIZE12.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs30STANDARD_ITEM_SLOT_GAP8.0Spacingscales with spacing_factorStandardItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs31STANDARD_ITEM_SUBTITLE_SLOT_GAP6.0Spacingscales with spacing_factorStandardItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs32STANDARD_ITEM_LABEL_SUBTITLE_GAP2.0Spacingscales with spacing_factorStandardItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs33STANDARD_ITEM_PADDING_HORIZONTAL8.0Spacingscales with spacing_factorStandardItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs34STANDARD_ITEM_PADDING_VERTICAL4.0Spacingscales with spacing_factorStandardItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs35STANDARD_ITEM_MIN_HEIGHT_SINGLE_LINE28.0Targetscales with target_sizeStandardItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs36STANDARD_ITEM_MIN_HEIGHT_TWO_LINE44.0Targetscales with target_sizeStandardItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs41STANDARD_ITEM_LABEL_COLUMN_MIN_WIDTH48.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs43STANDARD_ITEM_CHEVRON_COLUMN_WIDTH16.0Targetvisual fixed at 16 dp (below the floor); hit_outset is declared and delivers nothing hereStandardTreeItem::build wraps the chevron in a FixedSize of exactly this width, and an outset is only offered points every ancestor already contains (corrected by P40 — see Corrections P40)
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs43STANDARD_ITEM_TREE_INDENT_STEP16.0Spacingscales with spacing_factorStandardItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs44STANDARD_ITEM_ITEM_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs45STANDARD_ITEM_BG_HORIZONTAL_INSET4.0Spacingscales with spacing_factorStandardItemRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs47STANDARD_ITEM_FOCUS_RING_WIDTH1.5Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_standard_item_style.rs54STANDARD_ITEM_SELECTION_EDGE_WIDTH1.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_tab_style.rs45TAB_EDITOR_HEIGHT50.0Targetscales with target_sizeTabRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_tab_style.rs46TAB_TOOL_WINDOW_HEIGHT28.0Targetscales with target_sizeTabRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_tab_style.rs47TAB_PADDING_HORIZONTAL12.0Spacingscales with spacing_factorTabRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_tab_style.rs48TAB_UNDERLINE_ACTIVE2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_tab_style.rs49TAB_UNDERLINE_HOVER2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_tab_style.rs51TAB_CLOSE_BUTTON_SIZE16.0Targetvisual fixed at 16 dp, but it has no reader in this workspace and so carries no target: the tab's close affordance is a real IconButton at IconButtonSize::Compact, 24 dp at Compact and on the ladder above it (corrected by P40 — see Corrections P40)
crates/teksilo-widgets/src/styles/recipe_tab_style.rs52DROP_INDICATOR_WIDTH2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_table_style.rs35ROW_HEIGHT28.0Targetscales with target_sizeTableRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_table_style.rs37HEADER_HEIGHT32.0Targetscales with target_sizeTableRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_table_style.rs39CELL_PADDING_HORIZONTAL8.0Spacingscales with spacing_factorTableRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_table_style.rs41CELL_PADDING_VERTICAL4.0Spacingscales with spacing_factorTableRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_table_style.rs49RESIZE_HANDLE_WIDTH4.0Grabvisual fixed at 4 dp; grab via hit_outset (24 dp, 44 at Touch)
crates/teksilo-widgets/src/styles/recipe_table_style.rs53COLUMN_RESIZE_STEP8.0Grabfixed — keyboard step, not a hit dimension
crates/teksilo-widgets/src/styles/recipe_table_style.rs55GRID_LINE_THICKNESS1.0Decorationfixed — hairline rule
crates/teksilo-widgets/src/styles/recipe_table_style.rs57CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_table_style.rs59SORT_INDICATOR_SIZE10.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_table_style.rs61FILTER_INDICATOR_SIZE12.0Decorationfixed — indicator glyph; the header cell carries the target
crates/teksilo-widgets/src/styles/recipe_table_style.rs63HEADER_INTER_CELL_SPACING0.0Spacingscales with spacing_factorTableRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_table_style.rs65FOCUS_RING_INSET1.0Spacingscales with spacing_factorTableRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_table_style.rs67MIN_COLUMN_WIDTH_DEFAULT32.0Targetscales with target_sizeTableRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_table_style.rs69TREE_INDENT_PER_LEVEL16.0Spacingscales with spacing_factorTableRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_table_style.rs72TREE_TWIST_SIZE12.0Targetvisual fixed at 12 dp (below the floor); coarse hit via hit_outset, which is credited but earns one side only — the chevron sits at its cell's leading edge, measuring 18 × 24 at Compact and 22 × 28 at Comfortable, clearing the floor at Touch (corrected by P40 — see Corrections P40)
crates/teksilo-widgets/src/styles/recipe_table_style.rs73TREE_TWIST_LABEL_GAP4.0Spacingscales with spacing_factorTableRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_text_input_style.rs46TEXT_FIELD_HEIGHT28.0Targetscales with target_sizeTextInputRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_text_input_style.rs47TEXT_FIELD_PADDING_HORIZONTAL4.0Spacingscales with spacing_factorTextInputRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_text_input_style.rs48TEXT_FIELD_PADDING_VERTICAL4.0Spacingscales with spacing_factorTextInputRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_text_input_style.rs49TEXT_FIELD_BORDER_WIDTH1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/styles/recipe_text_input_style.rs50TEXT_FIELD_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_text_input_style.rs51TEXT_FIELD_CARET_WIDTH1.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/styles/recipe_text_input_style.rs52TEXT_FIELD_VALIDATION_STRIP_GAP4.0Spacingscales with spacing_factorTextInputRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_toast_style.rs26TOAST_PADDING_HORIZONTAL14.0Spacingscales with spacing_factorToastRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_toast_style.rs28TOAST_PADDING_VERTICAL12.0Spacingscales with spacing_factorToastRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_toast_style.rs31TOAST_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_toast_style.rs34TOAST_GLYPH_SIZE16.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/styles/recipe_toast_style.rs37TOAST_CONTENT_GAP12.0Spacingscales with spacing_factorToastRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_toast_style.rs39TOAST_TITLE_BODY_GAP2.0Spacingscales with spacing_factorToastRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_toast_style.rs41TOAST_BODY_ACTIONS_GAP8.0Spacingscales with spacing_factorToastRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_toggle_style.rs36TOGGLE_TRACK_WIDTH28.0Grabscales with target_size (the track IS the Toggle target)
crates/teksilo-widgets/src/styles/recipe_toggle_style.rs37TOGGLE_TRACK_HEIGHT16.0Grabfixed — track and knob are one coupled pill; the Toggle's target is the whole control
crates/teksilo-widgets/src/styles/recipe_toggle_style.rs38TOGGLE_THUMB_DIAMETER12.0Grabfixed — the whole Toggle is the target, not the knob
crates/teksilo-widgets/src/styles/recipe_toggle_style.rs39TOGGLE_THUMB_INSET2.0Spacingscales with spacing_factorToggleRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs27TOOLTIP_PADDING_HORIZONTAL10.0Spacingscales with spacing_factorTooltipRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs28TOOLTIP_PADDING_VERTICAL6.0Spacingscales with spacing_factorTooltipRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs29TOOLTIP_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs30TOOLTIP_MAX_WIDTH320.0Decorationfixed — container clamp, not a target
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs32TOOLTIP_SHADOW_DENSITY1.0— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs34COMPOSITE_TOOLTIP_PADDING_HORIZONTAL12.0Spacingscales with spacing_factorTooltipRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs35COMPOSITE_TOOLTIP_PADDING_VERTICAL12.0Spacingscales with spacing_factorTooltipRecipe::for_tokens
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs36COMPOSITE_TOOLTIP_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs37COMPOSITE_TOOLTIP_MAX_WIDTH480.0Decorationfixed — container clamp, not a target
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs38COMPOSITE_TOOLTIP_MAX_HEIGHT480.0Decorationfixed — container clamp, not a target
crates/teksilo-widgets/src/styles/recipe_tooltip_style.rs40COMPOSITE_TOOLTIP_SHADOW_DENSITY0.7— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)

§3 — widget-module constants outside styles/

§3a — pub const … : f32 (53 rows, 50 of them dimensions)

FileLineIdentifierValueClassP20 treatment
crates/teksilo-widgets/src/accordion.rs118ACCORDION_HEADER_HEIGHT28.0Targetscales with target_sizeaccordion_header_height(&InputTokens)
crates/teksilo-widgets/src/accordion.rs120ACCORDION_HEADER_PADDING_HORIZONTAL8.0Spacingscales with spacing_factoraccordion_header_padding_horizontal(&InputTokens)
crates/teksilo-widgets/src/accordion.rs122ACCORDION_INDICATOR_SIZE12.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/accordion.rs124ACCORDION_INDICATOR_GAP6.0Spacingscales with spacing_factoraccordion_indicator_gap(&InputTokens)
crates/teksilo-widgets/src/accordion.rs126ACCORDION_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/breadcrumb.rs86BREADCRUMB_ITEM_HEIGHT20.0Targetvisual fixed at 20 dp (below the floor); coarse hit via hit_outset
crates/teksilo-widgets/src/breadcrumb.rs88BREADCRUMB_ITEM_PADDING_HORIZONTAL6.0Spacingscales with spacing_factorbreadcrumb_item_padding_horizontal(&InputTokens)
crates/teksilo-widgets/src/breadcrumb.rs90BREADCRUMB_SEPARATOR_GAP4.0Spacingscales with spacing_factorbreadcrumb_separator_gap(&InputTokens)
crates/teksilo-widgets/src/breadcrumb.rs92BREADCRUMB_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/command_link_button.rs37COMMAND_LINK_BUTTON_ICON_SIZE28.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/command_link_button.rs38COMMAND_LINK_BUTTON_ICON_TEXT_GAP14.0Spacingscales with spacing_factorcommand_link_button_icon_text_gap(&InputTokens)
crates/teksilo-widgets/src/command_link_button.rs39COMMAND_LINK_BUTTON_TITLE_DESCRIPTION_GAP4.0Spacingscales with spacing_factorcommand_link_button_title_description_gap(&InputTokens)
crates/teksilo-widgets/src/command_link_button.rs40COMMAND_LINK_BUTTON_PADDING_HORIZONTAL16.0Spacingscales with spacing_factorcommand_link_button_padding_horizontal(&InputTokens)
crates/teksilo-widgets/src/command_link_button.rs41COMMAND_LINK_BUTTON_PADDING_VERTICAL14.0Spacingscales with spacing_factorcommand_link_button_padding_vertical(&InputTokens)
crates/teksilo-widgets/src/command_link_button.rs42COMMAND_LINK_BUTTON_MIN_HEIGHT64.0Targetscales with target_sizecommand_link_button_min_height(&InputTokens)
crates/teksilo-widgets/src/group_box.rs52GROUP_BOX_CONTENT_INDENT24.0Spacingscales with spacing_factorgroup_box_content_indent(&InputTokens)
crates/teksilo-widgets/src/group_box.rs54GROUP_BOX_TITLE_CONTENT_SPACING8.0Spacingscales with spacing_factorgroup_box_title_content_spacing(&InputTokens)
crates/teksilo-widgets/src/group_box.rs56GROUP_BOX_CHECKBOX_GAP6.0Spacingscales with spacing_factorgroup_box_checkbox_gap(&InputTokens)
crates/teksilo-widgets/src/primitives/divider.rs89DIVIDER_THICKNESS1.0Decorationfixed — hairline rule
crates/teksilo-widgets/src/shadow.rs46DENSITY_TOOLTIP1.0— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/shadow.rs48DENSITY_SURFACE0.5— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/shadow.rs50DENSITY_DIALOG0.3— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/split_button.rs66SPLIT_BUTTON_HEIGHT24.0Targetscales with target_sizesplit_button_height(&InputTokens)
crates/teksilo-widgets/src/split_button.rs67SPLIT_BUTTON_MIN_WIDTH72.0Targetscales with target_sizesplit_button_min_width(&InputTokens)
crates/teksilo-widgets/src/split_button.rs68SPLIT_BUTTON_PADDING_HORIZONTAL14.0Spacingscales with spacing_factorsplit_button_padding_horizontal(&InputTokens)
crates/teksilo-widgets/src/split_button.rs69SPLIT_BUTTON_PADDING_VERTICAL0.0Spacingscales with spacing_factorsplit_button_padding_vertical(&InputTokens)
crates/teksilo-widgets/src/split_button.rs70SPLIT_BUTTON_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-widgets/src/split_button.rs71SPLIT_BUTTON_BORDER_WIDTH1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/split_button.rs72SPLIT_BUTTON_CHEVRON_WIDTH22.0Targetvisual fixed at 22 dp; hit via hit_outset on the ChevronRegion node, whole shortfall on the leading edge (corrected by P25 — the two halves are separate nodes, so partition_targets would have had to move the painted boundary at Compact)
crates/teksilo-widgets/src/split_button.rs73SPLIT_BUTTON_DIVIDER_WIDTH1.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/split_button.rs74SPLIT_BUTTON_CHEVRON_ICON_SIZE12.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/split_button.rs76SPLIT_BUTTON_ICON_LABEL_GAP6.0Spacingscales with spacing_factorsplit_button_icon_label_gap(&InputTokens)
crates/teksilo-widgets/src/splitter/model.rs46SPLITTER_GUTTER_THICKNESS6.0Grabvisual fixed at 6 dp; grab via hit_outset (24 dp, 44 at Touch)
crates/teksilo-widgets/src/splitter/model.rs48SPLITTER_MIN_PANE_SIZE96.0Decorationfixed — container clamp, not a target: it is a pane's minimum content extent (96 dp, four times the floor), read from PaneDescriptor::default where no theme is in scope
crates/teksilo-widgets/src/splitter/model.rs50SPLITTER_KEYBOARD_STEP24.0Grabfixed — keyboard step, not a hit dimension
crates/teksilo-widgets/src/splitter/model.rs52SPLITTER_SNAP_OFFSET30.0Grabfixed — snap distance, not a hit dimension
crates/teksilo-widgets/src/status_bar.rs37STATUS_BAR_HEIGHT22.0Decorationfixed — container band; the items inside it carry the targets
crates/teksilo-widgets/src/status_bar.rs38STATUS_BAR_PADDING_HORIZONTAL8.0Spacingscales with spacing_factorstatus_bar_padding_horizontal(&InputTokens)
crates/teksilo-widgets/src/status_bar.rs39STATUS_BAR_ITEM_GAP2.0Spacingscales with spacing_factorstatus_bar_item_gap(&InputTokens)
crates/teksilo-widgets/src/tab_widget/bar.rs100DEFAULT_PINNED_TAB_WIDTH32.0Targetscales with target_sizedefault_pinned_tab_width(&InputTokens)
crates/teksilo-widgets/src/tab_widget/bar.rs88DEFAULT_MIN_TAB_WIDTH96.0Targetscales with target_sizedefault_min_tab_width(&InputTokens)
crates/teksilo-widgets/src/tab_widget/bar.rs90DEFAULT_MAX_TAB_WIDTH240.0Decorationfixed — container clamp, not a target
crates/teksilo-widgets/src/tab_widget/bar.rs95DEFAULT_TAB_SPACING0.0Spacingscales with spacing_factordefault_tab_spacing(&InputTokens)
crates/teksilo-widgets/src/tab_widget/bar.rs98DEFAULT_BAR_SLOT_SPACING8.0Spacingscales with spacing_factordefault_bar_slot_spacing(&InputTokens)
crates/teksilo-widgets/src/toast/body.rs60TOAST_BODY_DISCLOSURE_GAP2.0Spacingscales with spacing_factortoast_body_disclosure_gap(&InputTokens)
crates/teksilo-widgets/src/toast/body.rs63TOAST_DISCLOSURE_ACTION_GAP12.0Spacingscales with spacing_factortoast_disclosure_action_gap(&InputTokens)
crates/teksilo-widgets/src/toolbar.rs92TOOLBAR_HEIGHT_DEFAULT40.0Targetscales with target_sizetoolbar_height_default(&InputTokens)
crates/teksilo-widgets/src/toolbar.rs93TOOLBAR_SPACING4.0Spacingscales with spacing_factortoolbar_spacing(&InputTokens)
crates/teksilo-widgets/src/tool_box.rs240TOOL_BOX_HEADER_MIN_HEIGHT28.0Targetscales with target_sizetool_box_header_min_height(&InputTokens)
crates/teksilo-widgets/src/tool_box.rs241TOOL_BOX_HEADER_PADDING_HORIZONTAL12.0Spacingscales with spacing_factortool_box_header_padding_horizontal(&InputTokens)
crates/teksilo-widgets/src/tool_box.rs242TOOL_BOX_ICON_TEXT_SPACING8.0Spacingscales with spacing_factortool_box_icon_text_spacing(&InputTokens)
crates/teksilo-widgets/src/tool_box.rs243TOOL_BOX_CHEVRON_SIZE12.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/tool_box.rs244TOOL_BOX_INDICATOR_THICKNESS1.0Decorationfixed — hairline rule

§3b — private const … : f32 (113 rows)

Not public API, but P20 had to reach them anyway: this is where the splitter gutter, the dock gutter, all five SCROLLBAR_THICKNESS copies, the five duplicated EDGE / MAX_VELOCITY auto-scroll pairs and the text-drag threshold lived.

The five auto-scroll copies are gone. ListView, TreeView, TableView, TreeTableView, GridView's marquee and the TabBar strip each carried their own EDGE = 32.0 / MAX_VELOCITY = 12.0 and their own copy of the ramp; all six now call common::drag_autoscroll. Its band_for(PointerKind) is the reason the constants left this table rather than gaining a density route: the edge band is a property of the device — a cursor lands where it is put, a fingertip's reported centre wanders — so it widens for a coarse pointer (32 → 64 dp) and is unchanged for a precise one. It does not move with TargetDensity, which describes how big the UI's targets are. The velocity cap is a rate, not a dimension, and is the same everywhere.

The activity rail's gaps are fixed, and that is a decision, not an omission. RAIL_ITEM_SPACING and RAIL_PADDING are read by three co-dependent computations: the rail's layout (VStack::spacing, Padding::uniform), its overflow-capacity estimate (item_strideshown_capacity) and its drop-insertion geometry (rail_insertion). Two of those are pure functions with their own unit tests and no theme in scope. Scaling the layout without the capacity estimate would make the rail show more items than fit; threading tokens through the pure pair would rewrite assertions this package is not allowed to touch. The rail's touch conformance comes from its itemsDockRailItemSize resolves through IconButtonRecipe, which is target_size-routed — not from the gaps between them. Owner for any future change: P30.

FileLineIdentifierValueClassP20 treatment
crates/teksilo-widgets/src/accordion.rs661GAP2.0Spacingscales with spacing_factor — named ACCORDION_FILL_GAP (it was a function-local const) and resolved by accordion_fill_gap(&InputTokens)
crates/teksilo-widgets/src/animations/collapse.rs42COLLAPSED_PROGRESS_EPSILON0.005— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/animations/shake.rs44DEFAULT_AMPLITUDE8.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/animations/shake.rs45DEFAULT_CYCLES4.0— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/animations/smooth_size.rs65SIZE_CHANGE_EPSILON0.5— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/animations/unroll.rs57ROLLED_UP_PROGRESS_EPSILON0.005— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/breadcrumb.rs60FALLBACK_CHAR_WIDTH8.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/breadcrumb.rs61FALLBACK_LINE_HEIGHT16.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/calendar/zoom_grid.rs41CELL_SPACING4.0Spacingscales with spacing_factorcell_spacing(&InputTokens)
crates/teksilo-widgets/src/code_editor/gutter.rs49GUTTER_PAD_LEADING8.0Spacingscales with spacing_factorgutter_pad_leading(&InputTokens)
crates/teksilo-widgets/src/code_editor/gutter.rs50GUTTER_PAD_TRAILING12.0Spacingscales with spacing_factorgutter_pad_trailing(&InputTokens)
crates/teksilo-widgets/src/code_editor/log_stream.rs66FOLLOW_EPSILON1.5— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/code_editor/log_view.rs50SCROLLBAR_THICKNESS12.0Grabvisual fixed; coarse grab via hit_outset + target_regions
crates/teksilo-widgets/src/code_editor/mouse.rs175MARGIN20.0Decorationfixed — the editor's own auto-scroll band, tighter than common::drag_autoscroll's 32 dp because a caret drag inside text should start scrolling later; a finger selects text through P26's handles, not this ramp
crates/teksilo-widgets/src/code_editor/mouse.rs176MAX_PER_SEC60.0 * 60.0— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/code_editor/widget.rs45SCROLLBAR_THICKNESS12.0Grabvisual fixed; coarse grab via hit_outset + target_regions
crates/teksilo-widgets/src/combo_box.rs1098MIN_WIDTH120.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/command_palette.rs100SELECTION_MARKER_WIDTH3.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/command_palette.rs97ROW_HEIGHT44.0Targetscales with target_sizerow_height(&InputTokens)
crates/teksilo-widgets/src/common/column_geometry.rs106EPSILON1e-4— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/common/column_geometry.rs458EPSILON1e-4— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/common/editor_runtime.rs38CARET_BLINK_INTERVAL0.5Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/common/editor_runtime.rs43DEBOUNCE_WINDOW_SECS0.150— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/docking/activity_bar.rs113RAIL_ITEM_SPACING2.0Spacingfixed — the rail's gaps feed three co-dependent computations (layout, overflow capacity, drop-insertion geometry); see the activity-rail note in §3b
crates/teksilo-widgets/src/docking/activity_bar.rs115RAIL_PADDING4.0Spacingfixed — the rail's gaps feed three co-dependent computations (layout, overflow capacity, drop-insertion geometry); see the activity-rail note in §3b
crates/teksilo-widgets/src/docking/activity_bar.rs118LABELED_TITLE_ALLOWANCE72.0Spacingfixed — the rail's gaps feed three co-dependent computations (layout, overflow capacity, drop-insertion geometry); see the activity-rail note in §3b
crates/teksilo-widgets/src/docking/activity_bar.rs121LABELED_TOP_MARGIN6.0Spacingfixed — the rail's gaps feed three co-dependent computations (layout, overflow capacity, drop-insertion geometry); see the activity-rail note in §3b
crates/teksilo-widgets/src/docking/geometry.rs32EPS0.01— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/docking/resize_handle.rs34KEYBOARD_STEP16.0Grabfixed — keyboard step, not a hit dimension
crates/teksilo-widgets/src/docking/resize_handle.rs35SNAP_OFFSET30.0Grabfixed — snap distance, not a hit dimension
crates/teksilo-widgets/src/docking.rs65COLLAPSED_EPS0.01Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/docking.rs67DOCK_GUTTER6.0Grabvisual fixed at 6 dp; grab via hit_outset (24 dp, 44 at Touch) — and at Touch that ring reaches past the centre line of the dock tab strip beside it, which the audit reports as an unreachable target (corrected by P40 — see Corrections P40)
crates/teksilo-widgets/src/drop_target/overlay.rs40REGION_FILL_ALPHA0.22— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/drop_target.rs134DEFAULT_ZONE_SIZE_FACTOR0.2— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/grid_view.rs131SCROLLBAR_THICKNESS12.0Grabvisual fixed; coarse grab via hit_outset + target_regions
crates/teksilo-widgets/src/grid_view/selection.rs65MARQUEE_EDGE_ZONE32.0Grabnow an alias of common::drag_autoscroll::EDGE_BAND_PRECISE; the ramp is that module's step, and marquee_auto_scroll_step_for(.., PointerKind) widens the band for a finger
crates/teksilo-widgets/src/grid_view/selection.rs67MARQUEE_MAX_VELOCITY12.0Grabfixed — now an alias of common::drag_autoscroll::MAX_VELOCITY; a rate, not a hit dimension
crates/teksilo-widgets/src/list_view.rs108DEFAULT_ITEM_HEIGHT32.0Targetscales with target_sizedefault_item_height(&InputTokens)
crates/teksilo-widgets/src/list_view.rs110SCROLLBAR_THICKNESS12.0Grabvisual fixed; coarse grab via hit_outset + target_regions
crates/teksilo-widgets/src/list_view/widget_impl.rs709EDGE32.0Grabdeleted — the five hand-rolled copies of this ramp are folded into common::drag_autoscroll, whose band_for(PointerKind) is 32 dp for a precise pointer (unchanged) and 64 dp for a finger
crates/teksilo-widgets/src/list_view/widget_impl.rs710MAX_VELOCITY12.0Grabdeleted — folded into common::drag_autoscroll::MAX_VELOCITY; a rate, not a dimension, so it is the same under every pointer and every density
crates/teksilo-widgets/src/menu_item.rs123MENU_INDICATOR_GLYPH_SIZE12.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/message_box.rs429SEVERITY_ICON_SIZE48.0Targetscales with target_sizeseverity_icon_size(&InputTokens)
crates/teksilo-widgets/src/message_box.rs438DETAILS_MAX_HEIGHT220.0Decorationfixed — container clamp, not a target
crates/teksilo-widgets/src/notification/log.rs76DEFAULT_PREFERRED_WIDTH380.0Targetscales with target_sizedefault_preferred_width(&InputTokens)
crates/teksilo-widgets/src/notification/log.rs80DEFAULT_PREFERRED_HEIGHT320.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/primitives/column_flow.rs80DEFAULT_MIN_COLUMN_WIDTH240.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/primitives/image_widget.rs386EPS0.01— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/primitives/linear_layout.rs34EPS1.0e-3— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/primitives/text_input_field.rs100SCROLL_MARGIN4.0Spacingscales with spacing_factorscroll_margin(&InputTokens)
crates/teksilo-widgets/src/primitives/text_input_field.rs107DEFAULT_TEXT_HEIGHT20.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/progress_bar.rs59DEFAULT_THICKNESS4.0Decorationfixed — hairline rule
crates/teksilo-widgets/src/progress_bar.rs64INDETERMINATE_SWEEP_RATIO0.42— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/radio_tile.rs64TILE_ROW_GAP10.0Spacingscales with spacing_factortile_row_gap(&InputTokens)
crates/teksilo-widgets/src/radio_tile.rs66TILE_TITLE_DESC_GAP6.0Spacingscales with spacing_factortile_title_desc_gap(&InputTokens)
crates/teksilo-widgets/src/rich_text/mouse.rs125TEXT_DRAG_THRESHOLD4.0Grabmoves into GestureProfile.drag_slop (5 dp mouse / 18 dp touch), not a density scale — P26 owns the switch
crates/teksilo-widgets/src/rich_text/mouse.rs53RESIZE_MIN_EDGE24.0Decorationfixed — a minimum image edge (a content clamp), not a hit dimension; dp(24, Grab, ..) is the identity at every density anyway, and the grip's coarse hit is Widget::hit_outset (P26)
crates/teksilo-widgets/src/rich_text/mouse.rs61RESIZE_HANDLE_SLOP5.0Grababsorbed by Widget::hit_outset with PointerKindMask::ALL
crates/teksilo-widgets/src/rich_text/paint.rs156SELECTED_IMAGE_TINT_ALPHA0.28— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/rich_text/paint.rs163SELECTED_IMAGE_BORDER_WIDTH2.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-widgets/src/rich_text/body.rs54MEAN_ADVANCE_OVER_LINE_HEIGHT0.335— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/segmented_control/overflow.rs40EPS0.5— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/segmented_control.rs114FALLBACK_LINE_HEIGHT16.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/segmented_control.rs118OVERFLOW_ICON_SIZE12.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/shadow.rs55SUB_PERCEPTUAL1.0 / 255.0— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/spin_box.rs214MIN_WIDTH_WITH_BUTTONS72.0Targetscales with target_sizemin_width_with_buttons(&InputTokens)
crates/teksilo-widgets/src/spin_box.rs217MIN_WIDTH_NO_BUTTONS48.0Targetscales with target_sizemin_width_no_buttons(&InputTokens)
crates/teksilo-widgets/src/spin_box.rs221DEFAULT_PREFERRED_WIDTH120.0Targetscales with target_sizedefault_preferred_width(&InputTokens)
crates/teksilo-widgets/src/spin_box/step_button.rs43INITIAL_DELAY_SECS0.400— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/spin_box/step_button.rs46MIN_INTERVAL_SECS0.045— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/spin_box/step_button.rs48START_INTERVAL_SECS0.120— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/spin_box/step_button.rs52ACCELERATION0.88— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/spinner.rs42DEFAULT_SIZE20.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/spinner.rs44DEFAULT_ARC_FRACTION0.25— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/spinner.rs45DEFAULT_STROKE_FRACTION0.12— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/splitter/distribute.rs22EPS0.01— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/splitter.rs65COLLAPSED_VISIBLE_EPSILON0.01— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/standard_item.rs1548ROW_W680.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/standard_item.rs1572ROW_W680.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/standard_item.rs1597ROW_W400.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/stepper/indicator.rs35MARKER_LABEL_GAP10.0Spacingscales with spacing_factormarker_label_gap(&InputTokens)
crates/teksilo-widgets/src/table_view/header.rs66DRAG_REORDER_THRESHOLD5.0Grabmoves into GestureProfile.drag_slop (kind-derived), not a density scale
crates/teksilo-widgets/src/table_view.rs101SCROLLBAR_THICKNESS12.0Grabvisual fixed; coarse grab via hit_outset + target_regions
crates/teksilo-widgets/src/table_view/widget_impl.rs683EDGE32.0Grabdeleted — the five hand-rolled copies of this ramp are folded into common::drag_autoscroll, whose band_for(PointerKind) is 32 dp for a precise pointer (unchanged) and 64 dp for a finger
crates/teksilo-widgets/src/table_view/widget_impl.rs684MAX_VELOCITY12.0Grabdeleted — folded into common::drag_autoscroll::MAX_VELOCITY; a rate, not a dimension, so it is the same under every pointer and every density
crates/teksilo-widgets/src/tab_widget/bar.rs103SCROLL_ARROW_STEP120.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/tab_widget/bar.rs108WHEEL_LINE_PIXELS64.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/tab_widget/bar.rs111DRAG_EDGE_ZONE32.0Grabnow an alias of common::drag_autoscroll::EDGE_BAND_PRECISE; the strip's on_drag_tick reads band_for(ctx.pointer_kind())
crates/teksilo-widgets/src/tab_widget/bar.rs114DRAG_MAX_VELOCITY12.0Grabfixed — now an alias of common::drag_autoscroll::MAX_VELOCITY; a rate, not a hit dimension
crates/teksilo-widgets/src/tab_widget/bar.rs2763DROPDOWN_WIDTH240.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/tab_widget/bar.rs2766DROPDOWN_MAX_HEIGHT320.0Decorationfixed — container clamp, not a target
crates/teksilo-widgets/src/tab_widget/bar.rs2769DROPDOWN_ROW_HEIGHT28.0Targetscales with target_sizedropdown_row_height(&InputTokens)
crates/teksilo-widgets/src/tab_widget/bar.rs2771DROPDOWN_PADDING4.0Spacingscales with spacing_factordropdown_padding(&InputTokens)
crates/teksilo-widgets/src/tab_widget/bar.rs353REVEAL_EPSILON0.5— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-widgets/src/tab_widget/header.rs50NATURAL_MIN_WIDTH72.0Targetscales with target_sizenatural_min_width(&InputTokens)
crates/teksilo-widgets/src/tab_widget/header.rs52HEADER_PADDING_V6.0Spacingscales with spacing_factorheader_padding_v(&InputTokens)
crates/teksilo-widgets/src/tab_widget/header.rs54INNER_GAP6.0Spacingscales with spacing_factorinner_gap(&InputTokens)
crates/teksilo-widgets/src/tab_widget/header.rs57FALLBACK_CHAR_WIDTH8.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/toast/body.rs319LINE_H16.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/toast/body.rs320WIDTH160.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-widgets/src/toolbar.rs95CHEVRON_EXTENT30.0Targetscales with target_sizechevron_extent(&InputTokens)
crates/teksilo-widgets/src/toolbar.rs96ICON_SIZE16.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-widgets/src/tooltip/composite.rs209FOOTER_GAP6.0Spacingscales with spacing_factorfooter_gap(&InputTokens)
crates/teksilo-widgets/src/tooltip/dwell_indicator.rs31DWELL_INDICATOR_SIZE14.0Decorationfixed — indicator glyph, not an interactive target
crates/teksilo-widgets/src/tree_table_view.rs110SCROLLBAR_THICKNESS12.0Grabvisual fixed; coarse grab via hit_outset + target_regions
crates/teksilo-widgets/src/tree_table_view/widget_impl.rs671EDGE32.0Grabdeleted — the five hand-rolled copies of this ramp are folded into common::drag_autoscroll, whose band_for(PointerKind) is 32 dp for a precise pointer (unchanged) and 64 dp for a finger
crates/teksilo-widgets/src/tree_table_view/widget_impl.rs672MAX_VELOCITY12.0Grabdeleted — folded into common::drag_autoscroll::MAX_VELOCITY; a rate, not a dimension, so it is the same under every pointer and every density
crates/teksilo-widgets/src/tree_view/body_pane.rs557PREVIEW_WIDTH240.0Decorationfixed — the drag preview's footprint, painted under the pointer; no hit consequence
crates/teksilo-widgets/src/tree_view.rs85DEFAULT_ITEM_HEIGHT28.0Targetscales with target_sizedefault_item_height(&InputTokens)
crates/teksilo-widgets/src/tree_view.rs86SCROLLBAR_THICKNESS12.0Grabvisual fixed; coarse grab via hit_outset + target_regions
crates/teksilo-widgets/src/tree_view/widget_impl.rs949EDGE32.0Grabdeleted — the five hand-rolled copies of this ramp are folded into common::drag_autoscroll, whose band_for(PointerKind) is 32 dp for a precise pointer (unchanged) and 64 dp for a finger
crates/teksilo-widgets/src/tree_view/widget_impl.rs950MAX_VELOCITY12.0Grabdeleted — folded into common::drag_autoscroll::MAX_VELOCITY; a rate, not a dimension, so it is the same under every pointer and every density

§4 — theme presets and the previewer UI

teksilo-theme-fluent, teksilo-theme-macos and teksilo-theme-material3 install their own Tier-3 styles with their own constants, so P20's projection has to reach them or a preset silently stays Compact under Touch. teksilo-preview-ui is included because its navigator rows (22 / 28 dp) are the smallest interactive rows in the workspace.

How a preset re-projects. Each preset's *_style() metric factory gained a *_style_for(&InputTokens) twin, and the zero-argument original is now defined as the Compact call — so no existing caller or test changed, and install_styles reads theme.input. Each preset then registers a teksilo_core::styles::DensityProjection in its theme extensions; Theme::with_density calls it, and the preset rebuilds its own slots against the new tokens while colours, id, palette extension and any slot the app installed ride across untouched. Its own tests assert this (a_density_switch_re_derives_the_installed_slots).

The three presets do not share a ladder. Material 3 keeps its published 48 dp touch target (material3::input_tokens), so an M3 button is 40 dp at Compact and 48 dp at Touch, not 44. Fluent has no published touch ladder — WinUI's 40 px / 7.5 mm is a recommendation, not a metric its controls scale by — so it uses the generic one. macOS has none at all (there is no macOS touchscreen), so it uses the generic one too, and its [unpublished] 22 dp control height and [measured] 14 dp glyph controls stay at Apple's numbers in the paint at every density: growing them would falsify a preset whose whole purpose is to reproduce those numbers. What rises on macOS is the minimum hit box around a control — the two MinSize sites in §1.

FileLineIdentifierValueClassP20 treatment
crates/teksilo-preview-ui/src/doc_export.rs42MIN_INK_RATIO0.002— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-preview-ui/src/png_export.rs19EXPORT_SCALE2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/shape.rs37FLUENT_CONTROL_CORNER_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-fluent/src/shape.rs39FLUENT_OVERLAY_CORNER_RADIUS8.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-fluent/src/shape.rs41FLUENT_FOCUS_RING_WIDTH2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/shape.rs44FLUENT_FOCUS_RING_INNER_WIDTH1.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/shape.rs48FLUENT_FOCUS_RING_OFFSET1.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/button.rs49PADDING_H11.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/styles/button.rs51PADDING_TOP5.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/styles/button.rs53PADDING_BOTTOM6.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/styles/button.rs55MIN_HEIGHT32.0Targetscales with target_size — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/styles/checkbox.rs37BOX_SIZE20.0Targetvisual fixed at [WinUI] 20 dp (below the floor); coarse hit via hit_outset
crates/teksilo-theme-fluent/src/styles/checkbox.rs39GLYPH_SIZE12.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-theme-fluent/src/styles/checkbox.rs41STROKE1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-theme-fluent/src/styles/menu_item.rs36ITEM_HEIGHT8.0 + 20.0 + 9.0Targetscales with target_sizefluent_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-fluent/src/styles/menu_item.rs38PADDING_H11.0Spacingscales with spacing_factorfluent_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-fluent/src/styles/menu_item.rs40ICON_COLUMN16.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/menu_item.rs43ICON_LABEL_GAP12.0Spacingscales with spacing_factorfluent_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-fluent/src/styles/menu_item.rs45SHORTCUT_GAP24.0Spacingscales with spacing_factorfluent_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-fluent/src/styles/menu_item.rs47SEPARATOR_HEIGHT3.0Spacingscales with spacing_factorfluent_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-fluent/src/styles/metrics.rs50FLUENT_CONTROL_HEIGHT32.0Targetscales with target_size — the preset's fluent_*_style_for(&InputTokens) factories
crates/teksilo-theme-fluent/src/styles/radio.rs45OUTER20.0Targetvisual fixed at [WinUI] 20 dp (below the floor); coarse hit via hit_outset
crates/teksilo-theme-fluent/src/styles/radio.rs47STROKE1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-theme-fluent/src/styles/radio.rs49DOT12.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/radio.rs51DOT_HOVER14.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/radio.rs53DOT_PRESSED10.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/slider.rs39TRACK4.0Grabfixed — track is decoration; the thumb carries the target
crates/teksilo-theme-fluent/src/styles/slider.rs42THUMB22.0Grabvisual fixed; hit via SliderStyle::thumb_diameter_for(&self, cfg, &InputTokens) + target_regions
crates/teksilo-theme-fluent/src/styles/slider.rs44INNER12.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/slider.rs46INNER_HOVER14.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/slider.rs48INNER_PRESSED8.5Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/slider.rs50CROSS32.0Targetscales with target_sizecross(&InputTokens)
crates/teksilo-theme-fluent/src/styles/slider.rs52TICK4.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/standard_item.rs41PILL_WIDTH3.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/standard_item.rs43PILL_HEIGHT16.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/standard_item.rs45PILL_RADIUS1.5Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-fluent/src/styles/standard_item.rs47ROW_HEIGHT40.0Targetscales with target_sizefluent_standard_item_recipe_for(&InputTokens)
crates/teksilo-theme-fluent/src/styles/standard_item.rs49ROW_HEIGHT_TWO_LINE60.0Targetscales with target_sizefluent_standard_item_recipe_for(&InputTokens)
crates/teksilo-theme-fluent/src/styles/standard_item.rs51ICON_SIZE16.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-theme-fluent/src/styles/text_input.rs42MIN_HEIGHT32.0Targetscales with target_size — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/styles/text_input.rs53PADDING_LEADING10.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/styles/text_input.rs54PADDING_TRAILING6.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/styles/text_input.rs56EDGE_REST1.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/text_input.rs57EDGE_FOCUSED2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/styles/toggle.rs45TRACK_W40.0Targetscales with target_size
crates/teksilo-theme-fluent/src/styles/toggle.rs47TRACK_H20.0Grabfixed — track and knob are one coupled pill (a const _: () = assert! ties them); ROW_H carries the target
crates/teksilo-theme-fluent/src/styles/toggle.rs49KNOB12.0Grabscales with grab_size
crates/teksilo-theme-fluent/src/styles/toggle.rs51KNOB_HOVER14.0Grabscales with grab_size
crates/teksilo-theme-fluent/src/styles/toggle.rs53KNOB_PRESSED_W17.0Grabscales with grab_size
crates/teksilo-theme-fluent/src/styles/toggle.rs54KNOB_PRESSED_H14.0Grabscales with grab_size
crates/teksilo-theme-fluent/src/styles/toggle.rs57KNOB_INSET4.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/styles/toggle.rs60KNOB_MARGIN3.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/styles/toggle.rs62TRACK_STROKE1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-theme-fluent/src/styles/toggle.rs65ROW_H32.0Targetscales with target_size — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-fluent/src/typography.rs54FLUENT_BODY_SIZE14.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-fluent/src/typography.rs56FLUENT_CAPTION_SIZE12.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/palette.rs104SECONDARY_LABEL_ALPHA_LIGHT0.50— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-theme-macos/src/palette.rs109SECONDARY_LABEL_ALPHA_DARK0.55— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-theme-macos/src/palette.rs298FLOOR4.5— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-theme-macos/src/shape.rs62MACOS_CONTROL_CORNER_RADIUS6.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-macos/src/shape.rs64MACOS_OVERLAY_CORNER_RADIUS10.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-macos/src/shape.rs67MACOS_MENU_CORNER_RADIUS9.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-macos/src/shape.rs71MACOS_FOCUS_RING_WIDTH2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/shape.rs74MACOS_FOCUS_RING_HALO_WIDTH2.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/shape.rs76MACOS_FOCUS_RING_HALO_ALPHA0.35— not a dimensionfixed — unitless (ratio / alpha / duration / epsilon)
crates/teksilo-theme-macos/src/shape.rs80MACOS_FOCUS_RING_OFFSET0.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/shape.rs90MACOS_CONTROL_HEIGHT22.0Targetvisual fixed at Apple's [unpublished] 22 dp; the §1 MinSize sites carry the 24 dp floor
crates/teksilo-theme-macos/src/shape.rs99MACOS_SMALL_CONTROL_SIZE14.0Targetvisual fixed at Apple's [measured] 14 dp; coarse hit via hit_outset
crates/teksilo-theme-macos/src/styles/button.rs57PADDING_H10.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-macos/src/styles/button.rs60PADDING_V3.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-macos/src/styles/checkbox.rs40BOX_SIZEMACOS_SMALL_CONTROL_SIZETargetvisual fixed at MACOS_SMALL_CONTROL_SIZE (14 dp); coarse hit via hit_outset
crates/teksilo-theme-macos/src/styles/checkbox.rs42CORNER3.5Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-macos/src/styles/checkbox.rs44GLYPH_SIZE10.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-theme-macos/src/styles/checkbox.rs46STROKE1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-theme-macos/src/styles/chrome.rs62CONTROL_SHADOW_OFFSET_Y0.5Decorationfixed — elevation, not geometry
crates/teksilo-theme-macos/src/styles/chrome.rs66CONTROL_SHADOW_BLUR1.5Decorationfixed — elevation, not geometry
crates/teksilo-theme-macos/src/styles/chrome.rs68CATCH_LIGHT_THICKNESS1.0Decorationfixed — hairline rule
crates/teksilo-theme-macos/src/styles/menu_item.rs41ITEM_HEIGHT22.0Targetvisual fixed at AppKit's [measured] 22 dp; coarse hit via hit_outset — the gaps around it scale, macos_menu_item_recipe_for
crates/teksilo-theme-macos/src/styles/menu_item.rs43PADDING_H10.0Spacingscales with spacing_factormacos_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/menu_item.rs45ICON_COLUMN14.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/styles/menu_item.rs48ICON_LABEL_GAP8.0Spacingscales with spacing_factormacos_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/menu_item.rs51SHORTCUT_GAP32.0Spacingscales with spacing_factormacos_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/menu_item.rs53SEPARATOR_HEIGHT11.0Spacingscales with spacing_factormacos_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/menu_item.rs55HIGHLIGHT_RADIUS4.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-macos/src/styles/menu_item.rs57HIGHLIGHT_INSET5.0Spacingscales with spacing_factormacos_menu_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/metrics.rs368FLUENT_CONTROL_HEIGHT32.0Targetscales with target_size — the preset's macos_*_style_for(&InputTokens) factories
crates/teksilo-theme-macos/src/styles/metrics.rs52MACOS_HELP_TAG_CORNER_RADIUS5.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-macos/src/styles/metrics.rs56MACOS_ROW_HEIGHT24.0Targetscales with target_size — the preset's macos_*_style_for(&InputTokens) factories
crates/teksilo-theme-macos/src/styles/radio.rs41OUTERMACOS_SMALL_CONTROL_SIZETargetvisual fixed at MACOS_SMALL_CONTROL_SIZE (14 dp); coarse hit via hit_outset
crates/teksilo-theme-macos/src/styles/radio.rs44DOT4.5Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/styles/radio.rs46STROKE1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-theme-macos/src/styles/radio.rs48CORNER3.5Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-macos/src/styles/slider.rs38TRACK4.0Grabfixed — track is decoration; the thumb carries the target
crates/teksilo-theme-macos/src/styles/slider.rs41THUMB18.0Grabvisual fixed; hit via SliderStyle::thumb_diameter_for(&self, cfg, &InputTokens) + target_regions
crates/teksilo-theme-macos/src/styles/slider.rs43CROSSMACOS_CONTROL_HEIGHTTargetvisual fixed at MACOS_CONTROL_HEIGHT (22 dp, below the floor); coarse hit via hit_outset
crates/teksilo-theme-macos/src/styles/slider.rs45TICK4.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/styles/slider.rs47DEFAULT_LENGTH160.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/styles/slider.rs49KNOB_SHADOW_OFFSET_Y0.5Decorationfixed — elevation, not geometry
crates/teksilo-theme-macos/src/styles/slider.rs50KNOB_SHADOW_BLUR1.5Decorationfixed — elevation, not geometry
crates/teksilo-theme-macos/src/styles/standard_item.rs53ROW_HEIGHT24.0Targetscales with target_sizemacos_standard_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/standard_item.rs56ROW_HEIGHT_TWO_LINE40.0Targetscales with target_sizemacos_standard_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/standard_item.rs58ICON_SIZE16.0Decorationfixed — glyph metric; follows text scale, not target density
crates/teksilo-theme-macos/src/styles/standard_item.rs60CAPSULE_RADIUS5.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-macos/src/styles/standard_item.rs62CAPSULE_INSET5.0Spacingscales with spacing_factormacos_standard_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/standard_item.rs70PADDING_HCAPSULE_INSET + LABEL_INSET_IN_CAPSULESpacingscales with spacing_factormacos_standard_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/standard_item.rs72LABEL_INSET_IN_CAPSULE8.0Spacingscales with spacing_factormacos_standard_item_recipe_for(&InputTokens)
crates/teksilo-theme-macos/src/styles/text_input.rs57PADDING_H6.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-macos/src/styles/toggle.rs43TRACK_W38.0Targetscales with target_size
crates/teksilo-theme-macos/src/styles/toggle.rs46TRACK_HMACOS_CONTROL_HEIGHTGrabfixed — MACOS_CONTROL_HEIGHT; the switch is one coupled shape (a const _: () = assert! ties knob to track)
crates/teksilo-theme-macos/src/styles/toggle.rs48KNOB18.0Grabscales with grab_size
crates/teksilo-theme-macos/src/styles/toggle.rs50KNOB_INSET2.0Spacingscales with spacing_factor — the style's own make_body, from ctx.theme().input
crates/teksilo-theme-macos/src/styles/toggle.rs52TRACK_STROKE1.0Decorationfixed — hairline stroke; scaling it thickens the design language
crates/teksilo-theme-macos/src/styles/toggle.rs54KNOB_SHADOW_OFFSET_Y0.5Decorationfixed — elevation, not geometry
crates/teksilo-theme-macos/src/styles/toggle.rs55KNOB_SHADOW_BLUR1.5Decorationfixed — elevation, not geometry
crates/teksilo-theme-macos/src/typography.rs66MACOS_BODY_SIZE13.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/typography.rs68MACOS_CALLOUT_SIZE12.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/typography.rs70MACOS_SUBHEADLINE_SIZE11.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/typography.rs73MACOS_TRACKING_13-0.08Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/typography.rs75MACOS_TRACKING_120.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-macos/src/typography.rs77MACOS_TRACKING_110.06Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-material3/src/shape.rs23M3_FOCUS_RING_WIDTH3.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-material3/src/shape.rs25M3_RADIUS_POPUP12.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-material3/src/styles/button.rs35HEIGHT40.0Targetscales with target_sizem3_button_style(&InputTokens)
crates/teksilo-theme-material3/src/styles/button.rs37PADDING_H24.0Spacingscales with spacing_factorm3_button_style(&InputTokens)
crates/teksilo-theme-material3/src/styles/button.rs39PADDING_H_TEXT16.0Spacingscales with spacing_factorm3_button_style(&InputTokens)
crates/teksilo-theme-material3/src/styles/button.rs41FOCUS_WIDTH3.0Decorationfixed — decorative geometry, no hit consequence
crates/teksilo-theme-material3/src/styles/card.rs20M3_CARD_RADIUS12.0Decorationfixed — corner radius is shape identity, not a hit target
crates/teksilo-theme-material3/src/styles/toggle.rs26TRACK_W52.0Targetscales with target_size
crates/teksilo-theme-material3/src/styles/toggle.rs27TRACK_H32.0Targetscales with target_size
crates/teksilo-theme-material3/src/styles/toggle.rs28THUMB_OFF16.0Grabscales with grab_size
crates/teksilo-theme-material3/src/styles/toggle.rs29THUMB_ON24.0Grabscales with grab_size
crates/teksilo-theme-material3/src/styles/toggle.rs30THUMB_PRESSED28.0Grabscales with grab_size
crates/teksilo-theme-material3/src/styles/toggle.rs31TRACK_OUTLINE_W2.0Decorationfixed — decorative geometry, no hit consequence