6adf086a89ea
fix Peach Pro card CTA button clipping in the settings deck preview - the Pro card is the tallest in the deck (6 features + price + button + license-key section) and was the only one where the shared expandedH preview budget clipped tight, leaving the Get Peach Pro button flush against the fanned tab beneath it with no visible margin. Added an optional per-row verticalPadding param to the shared RowLine helper (default unchanged at 9dp, so no other card's spacing shifted), used 6dp for Pro's 6 feature rows specifically, and increased the trailing spacer after the button from a first attempt at 28dp (still let the LICENSE KEY label peek through, per live feedback) to 44dp - confirmed clean on a freshly created non-Pro vault with real margin between the button and the tab below and no license-key label bleed-through.
- time
- 2026-07-24 12:53 UTC · 3 months ago
- machine
- koh2
- agent
- claude-sonnet-5
- session
- critical-corrections-c1-c7
- parent
- 8ec8a51c5f29
↓ peach-android-6adf086a.tar.gzatlas at this save
files changed1 file
app/src/main/java/com/peachpasswords/ui/settings/SettingsCardBodies.kt+20 −6app/src/main/java/com/peachpasswords/ui/settings/SettingsCardBodies.kt+20 −6
@@ -113,9 +113,14 @@113113 }114114 115115 @Composable116-private fun RowLine(fg: Color, modifier: Modifier = Modifier, content: @Composable RowScope.() -> Unit) {116+private fun RowLine(117+ fg: Color,118+ modifier: Modifier = Modifier,119+ verticalPadding: Dp = 9.dp,120+ content: @Composable RowScope.() -> Unit,121+) {117122 Row(118- Modifier.fillMaxWidth().then(modifier).padding(vertical = 9.dp),123+ Modifier.fillMaxWidth().then(modifier).padding(vertical = verticalPadding),119124 verticalAlignment = Alignment.CenterVertically,120125 horizontalArrangement = Arrangement.SpaceBetween,121126 content = content,@@ -788,9 +793,13 @@788793 modifier = Modifier.padding(top = 6.dp),789794 color = fg.copy(alpha = 0.72f), fontFamily = PeachType.Body, fontSize = 12.sp, lineHeight = 17.sp,790795 )791- Spacer(Modifier.height(12.dp))796+ Spacer(Modifier.height(10.dp))792797 features.forEachIndexed { i, (name, desc) ->793- RowLine(fg) {798+ // Compact rows (6dp vs. the shared 9dp default) — this card is the799+ // tallest in the deck (6 features + price + CTA) and used to leave800+ // its button with no breathing room before the fanned tab stacked801+ // right beneath it in preview mode.802+ RowLine(fg, verticalPadding = 6.dp) {794803 Row(Modifier.weight(1f), verticalAlignment = Alignment.CenterVertically) {795804 Text("%02d".format(i + 1), color = fg.copy(alpha = 0.5f), fontFamily = PeachType.Mono, fontSize = 10.sp, modifier = Modifier.padding(end = 10.dp))796805 Text(name, color = fg, fontFamily = PeachType.Body, fontSize = 13.sp)@@ -798,7 +807,7 @@798807 Text(desc, color = fg.copy(alpha = 0.6f), fontFamily = PeachType.Display, fontStyle = FontStyle.Italic, fontSize = 11.sp)799808 }800809 }801- Spacer(Modifier.height(14.dp))810+ Spacer(Modifier.height(12.dp))802811 Text(803812 "$39",804813 color = fg, fontFamily = PeachType.Display, fontStyle = FontStyle.Italic, fontSize = 28.sp,@@ -816,7 +825,12 @@816825 contentAlignment = Alignment.Center,817826 ) { Text("Get Peach Pro", color = fg, fontFamily = PeachType.Mono, fontSize = 12.sp) }818827 819- Spacer(Modifier.height(16.dp))828+ // Trailing breathing room so the button clears the fanned tab stacked829+ // beneath this card in preview mode, where the scrollable viewport clips830+ // right around here (the license-key section below is already out of831+ // view at that height).832+ Spacer(Modifier.height(44.dp))833+820834 Text("LICENSE KEY", color = fg.copy(alpha = 0.6f), fontFamily = PeachType.Mono, fontSize = 8.sp, letterSpacing = 0.22.em)821835 var key by remember { mutableStateOf("") }822836 val activating by vm.activating.collectAsState()