diff --git a/client-app/app/(app)/feed/index.tsx b/client-app/app/(app)/feed/index.tsx index 4815ab1..5956cd2 100644 --- a/client-app/app/(app)/feed/index.tsx +++ b/client-app/app/(app)/feed/index.tsx @@ -251,43 +251,29 @@ export default function FeedScreen() { contentContainerStyle={posts.length === 0 ? { flexGrow: 1 } : undefined} /> - {/* Floating compose button. - * - * Wrapped in a StyleSheet.absoluteFill container with pointerEvents - * "box-none" so only the FAB captures touches — taps anywhere else - * pass through to the FlatList below. - * - * Inside the wrapper, alignSelf: 'flex-end' pins to the right; - * bottom inset leaves ~14px clearance above the NavBar (≈56px tall - * + safe-area-bottom). Explicit `right: 14` is belt-and-braces - * for RTL / platform quirks where alignSelf alone might not pin. */} - router.push('/(app)/compose' as never)} + style={({ pressed }) => ({ position: 'absolute', - left: 0, right: 0, top: 0, bottom: 0, - }} + right: 12, + bottom: 12, + width: 56, height: 56, + borderRadius: 28, + backgroundColor: pressed ? '#1a8cd8' : '#1d9bf0', + alignItems: 'center', justifyContent: 'center', + shadowColor: '#000', + shadowOffset: { width: 0, height: 4 }, + shadowOpacity: 0.5, + shadowRadius: 6, + elevation: 8, + })} > - router.push('/(app)/compose' as never)} - style={({ pressed }) => ({ - position: 'absolute', - right: 14, - bottom: Math.max(insets.bottom, 8) + 70, - width: 56, height: 56, - borderRadius: 28, - backgroundColor: pressed ? '#1a8cd8' : '#1d9bf0', - alignItems: 'center', justifyContent: 'center', - shadowColor: '#000', - shadowOffset: { width: 0, height: 4 }, - shadowOpacity: 0.5, - shadowRadius: 6, - elevation: 8, - })} - > - - - + + ); } diff --git a/client-app/components/feed/PostCard.tsx b/client-app/components/feed/PostCard.tsx index 0774cad..87c44a5 100644 --- a/client-app/components/feed/PostCard.tsx +++ b/client-app/components/feed/PostCard.tsx @@ -174,8 +174,7 @@ function PostCardInner({ post, likedByMe, onStatsChanged, onDeleted, compact }: style={({ pressed }) => ({ flexDirection: 'row', paddingHorizontal: 16, - paddingTop: compact ? 14 : 18, - paddingBottom: compact ? 16 : 20, + paddingVertical: compact ? 10 : 12, backgroundColor: pressed ? '#080808' : 'transparent', })} > @@ -324,13 +323,20 @@ export const PostCard = React.memo(PostCardInner); * every feed surface (timeline, author, hashtag, post detail) can pass * it as ItemSeparatorComponent and get identical spacing / colour. * - * The line colour (#2a2a2a) is the minimum grey that reads on OLED - * black under mobile-bright-mode gamma — go darker and the seam vanishes. - * Height 1 is one logical px (hairline on retina). No horizontal inset: - * Twitter runs the seam edge-to-edge and it looks cleaner than a gap. + * Layout: 12px blank space → 1px grey line → 12px blank space. The + * blank space on each side makes the line "float" between posts rather + * than hugging the edge of the card — gives clear visual separation + * without needing big card padding everywhere. + * + * Colour #2a2a2a is the minimum grey that reads on OLED black under + * mobile-bright-mode gamma; darker and the seam vanishes. */ export function PostSeparator() { - return ; + return ( + + + + ); } // ── Inline helpers ──────────────────────────────────────────────────────