10a2056f7f92148975863b3375bd84aa6716b9be
The recurring spacing and crowding problems shared one cause: geometry was tuned against the Pixel emulator (427 x 952dp) while the target device is a Galaxy S24+ (SM-S926U, 1080x2340 @ 450dpi = 384 x 832dp). That is 43dp narrower and 120dp shorter — roughly two button rows — so the emulator consistently hid the failures instead of showing them. Seat crowding. Seat width was fixed at 88dp while positions were fractions of width, so seats collided as the screen narrowed. Measured at 384dp, ALL FOUR adjacent pairs overlapped: -30.4, -3.5, -3.5, -30.4 dp. Seat width now derives from the measured container so five seats always fit with equal real gaps, and revealed cards scale within the slot rather than widening it. TableOrbitTest asserts no overlap and even spacing at 320/360/384/411/427/480dp, so the narrow case cannot regress unnoticed again. Raise panel rhythm. A Material Slider paints a ~16dp track inside a 48dp accessibility touch target. Laid out at 48dp it injected 16dp of invisible padding above and below, so a uniform declared gap rendered as ~20dp around the slider and ~4dp between the filled buttons. That is why tuning the uniform number never worked: the error is a constant offset, not a proportional one, and tightening 12dp to 4dp made the ratio worse (2.3x to 5x). The slider now reserves only its painted height via requiredHeight while keeping the 48dp touch target. Control contrast. Back and +/- buttons were 9% white on near-black, too faint to read as blocks, so the eye measured gaps between ink rather than layout bounds. Raised to 16%, presets to 12%. Grouping. The confirm action is separated from the three sizing rows rather than evenly spaced among them; they set a value, it commits one. Measured on S24+ geometry, gaps between the sizing rows went from [23.1, 20.3, 3.9] (spread 19.2dp, visibly shrinking) to [14.6, 14.6] with a deliberate 26.3dp break before Confirm — spread 0.0dp within the group. Reclaimed space. The table was aspect-ratio locked, leaving 178dp of dead felt (21% of the display) between the hero cards and the controls once the two-stage raise freed it. The table now fills the available height and the felt is an oval sized to its container rather than a width-derived circle. 259 tests, 0 failures. Lint 0 errors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Description
No description provided
Languages
Kotlin
89.4%
HTML
10.3%
Shell
0.3%