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
1 file app/src/main/java/com/peachpasswords/ui/settings/SettingsCardBodies.kt+20 −6
app/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()

view file