diff --git a/app/src/main/java/app/closer/ui/answers/AnswerHistoryScreen.kt b/app/src/main/java/app/closer/ui/answers/AnswerHistoryScreen.kt index 20fc95ad..67148c67 100644 --- a/app/src/main/java/app/closer/ui/answers/AnswerHistoryScreen.kt +++ b/app/src/main/java/app/closer/ui/answers/AnswerHistoryScreen.kt @@ -1,5 +1,6 @@ package app.closer.ui.answers +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -106,11 +107,7 @@ private fun AnswerHistoryContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { LazyColumn( @@ -129,12 +126,12 @@ private fun AnswerHistoryContent( Text( text = "What you have opened", style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( text = "Private answers and revealed reflections, gathered in one place.", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } } @@ -201,7 +198,7 @@ private fun AnswerHistoryCard( Text( text = answer.questionText, style = MaterialTheme.typography.titleMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold, maxLines = 2, overflow = TextOverflow.Ellipsis @@ -209,7 +206,7 @@ private fun AnswerHistoryCard( Text( text = if (answer.isRevealed) answer.revealSummary() else "Saved privately. Tap to reveal.", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 2, overflow = TextOverflow.Ellipsis ) @@ -248,7 +245,7 @@ private fun HistoryPill(label: String) { text = label, modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), style = MaterialTheme.typography.labelMedium, - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) } } diff --git a/app/src/main/java/app/closer/ui/answers/AnswerRevealScreen.kt b/app/src/main/java/app/closer/ui/answers/AnswerRevealScreen.kt index f02ff5af..378bcdbf 100644 --- a/app/src/main/java/app/closer/ui/answers/AnswerRevealScreen.kt +++ b/app/src/main/java/app/closer/ui/answers/AnswerRevealScreen.kt @@ -1,5 +1,6 @@ package app.closer.ui.answers +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -81,11 +82,7 @@ private fun AnswerRevealContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { Column( @@ -113,7 +110,7 @@ private fun AnswerRevealContent( Text( text = state.error, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } state.answer == null -> NoAnswerState( @@ -152,7 +149,7 @@ private fun NoAnswerState( Text( text = question?.text ?: "This prompt is ready when you are.", style = MaterialTheme.typography.titleMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold, maxLines = 4, overflow = TextOverflow.Ellipsis @@ -160,7 +157,7 @@ private fun NoAnswerState( Text( text = "Answer privately first. Reveal can wait until there is something worth opening together.", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -205,7 +202,7 @@ private fun ReadyToRevealState( Text( text = question?.text ?: answer.questionText, style = MaterialTheme.typography.titleLarge, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold, maxLines = 4, overflow = TextOverflow.Ellipsis @@ -214,7 +211,7 @@ private fun ReadyToRevealState( Text( text = "No rush. Reveal this only when you want the conversation to open.", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -263,7 +260,7 @@ private fun RevealedState( Text( text = question?.text ?: answer.questionText, style = MaterialTheme.typography.titleLarge, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold, maxLines = 4, overflow = TextOverflow.Ellipsis @@ -317,14 +314,14 @@ private fun RevealHeader() { Text( text = "Reveal together", style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 2, overflow = TextOverflow.Ellipsis ) Text( text = "A saved answer can stay private, become a shared reflection, or simply wait for the right moment.", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 4, overflow = TextOverflow.Ellipsis ) @@ -373,7 +370,7 @@ private fun RevealPill(label: String) { text = label, modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), style = MaterialTheme.typography.labelMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) diff --git a/app/src/main/java/app/closer/ui/auth/AuthVisuals.kt b/app/src/main/java/app/closer/ui/auth/AuthVisuals.kt index 948da09c..e1829f8c 100644 --- a/app/src/main/java/app/closer/ui/auth/AuthVisuals.kt +++ b/app/src/main/java/app/closer/ui/auth/AuthVisuals.kt @@ -1,5 +1,6 @@ package app.closer.ui.auth +import app.closer.ui.theme.closerCardColor import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.geometry.Offset @@ -14,7 +15,7 @@ import app.closer.ui.theme.PrimaryColor internal val AuthBackgroundBrush: Brush get() = Brush.linearGradient( - colors = listOf(BackgroundColor, CloserPalette.PurpleSoft, CloserPalette.PinkMist), + colors = listOf(BackgroundColor, CloserPalette.BackgroundWash, CloserPalette.PinkMist), start = Offset.Zero, end = Offset.Infinite ) @@ -32,7 +33,7 @@ internal fun authTextFieldColors() = OutlinedTextFieldDefaults.colors( focusedLabelColor = AuthPrimaryDeep, unfocusedLabelColor = AuthMuted, cursorColor = AuthPrimaryDeep, - focusedContainerColor = Color.White.copy(alpha = 0.92f), + focusedContainerColor = closerCardColor(alpha = 0.92f), unfocusedContainerColor = Color.White.copy(alpha = 0.78f), focusedTextColor = AuthInk, unfocusedTextColor = AuthInk, diff --git a/app/src/main/java/app/closer/ui/components/EmptyState.kt b/app/src/main/java/app/closer/ui/components/EmptyState.kt index 2aac9d45..7199fb31 100644 --- a/app/src/main/java/app/closer/ui/components/EmptyState.kt +++ b/app/src/main/java/app/closer/ui/components/EmptyState.kt @@ -1,5 +1,6 @@ package app.closer.ui.components +import app.closer.ui.theme.closerCardColor import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -28,7 +29,7 @@ fun EmptyState( Card( modifier = modifier.fillMaxWidth(), shape = RoundedCornerShape(28.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.86f)) + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.86f)) ) { Column( modifier = Modifier.padding(20.dp), @@ -38,12 +39,12 @@ fun EmptyState( text = title, style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.SemiBold, - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( text = body, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) if (actionLabel != null && onAction != null) { Button( @@ -52,7 +53,7 @@ fun EmptyState( shape = RoundedCornerShape(16.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ) ) { Text(actionLabel) diff --git a/app/src/main/java/app/closer/ui/components/ErrorState.kt b/app/src/main/java/app/closer/ui/components/ErrorState.kt index 3e6b7857..3f39ec0b 100644 --- a/app/src/main/java/app/closer/ui/components/ErrorState.kt +++ b/app/src/main/java/app/closer/ui/components/ErrorState.kt @@ -42,7 +42,7 @@ fun ErrorState( Text( text = message, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) if (onRetry != null) { OutlinedButton( diff --git a/app/src/main/java/app/closer/ui/components/LoadingState.kt b/app/src/main/java/app/closer/ui/components/LoadingState.kt index 6b66235b..96126b8e 100644 --- a/app/src/main/java/app/closer/ui/components/LoadingState.kt +++ b/app/src/main/java/app/closer/ui/components/LoadingState.kt @@ -42,7 +42,7 @@ fun LoadingState( Text( text = message, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.Center ) } diff --git a/app/src/main/java/app/closer/ui/components/PlaceholderScreen.kt b/app/src/main/java/app/closer/ui/components/PlaceholderScreen.kt index 5f562711..201a8615 100644 --- a/app/src/main/java/app/closer/ui/components/PlaceholderScreen.kt +++ b/app/src/main/java/app/closer/ui/components/PlaceholderScreen.kt @@ -1,5 +1,6 @@ package app.closer.ui.components +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.Canvas import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -60,15 +61,7 @@ fun PlaceholderScreen( chips: List = emptyList(), details: List = emptyList() ) { - val background = Brush.linearGradient( - colors = listOf( - Color(0xFFFFFBFE), - Color(0xFFF8F1FF), - Color(0xFFFFEEF7) - ), - start = Offset.Zero, - end = Offset.Infinite - ) + val background = closerBackgroundBrush() Box( modifier = modifier @@ -128,7 +121,7 @@ fun PlaceholderScreen( modifier = Modifier.weight(1f), colors = ButtonDefaults.buttonColors( containerColor = accent, - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ), shape = RoundedCornerShape(16.dp) ) { @@ -196,7 +189,7 @@ private fun PlaceholderHeader( style = MaterialTheme.typography.displaySmall.copy( fontWeight = FontWeight.SemiBold ), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -204,7 +197,7 @@ private fun PlaceholderHeader( Text( text = description, style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 6, overflow = TextOverflow.Ellipsis ) @@ -233,7 +226,7 @@ private fun SignalChip( text = label, modifier = Modifier.padding(horizontal = 13.dp, vertical = 8.dp), style = MaterialTheme.typography.labelMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -265,7 +258,7 @@ private fun PreviewPanel( Text( text = title, style = MaterialTheme.typography.titleMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -329,7 +322,7 @@ private fun DetailRow( Text( text = detail, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.weight(1f), maxLines = 2, overflow = TextOverflow.Ellipsis diff --git a/app/src/main/java/app/closer/ui/components/SpecialDatesSection.kt b/app/src/main/java/app/closer/ui/components/SpecialDatesSection.kt index 65f021bd..4d2317c1 100644 --- a/app/src/main/java/app/closer/ui/components/SpecialDatesSection.kt +++ b/app/src/main/java/app/closer/ui/components/SpecialDatesSection.kt @@ -56,7 +56,7 @@ fun SpecialDatesSection( Text( text = "Your Special Dates", style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) if (compact) { DateCountPill() @@ -87,7 +87,7 @@ fun SpecialDatesSection( Text( text = "Your Anniversary", style = MaterialTheme.typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) if (!compact) { TodayPill() @@ -96,7 +96,7 @@ fun SpecialDatesSection( Text( text = "Added by Jessica", style = MaterialTheme.typography.bodySmall, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } @@ -113,7 +113,7 @@ fun SpecialDatesSection( Text( text = "Next up: Jessica's birthday May 10, Mark's birthday Aug 25", style = MaterialTheme.typography.bodySmall, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -138,7 +138,7 @@ private fun BirthdayRow(name: String, day: String, month: String) { Text( text = "$name's Birthday", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, modifier = Modifier.weight(1f) ) diff --git a/app/src/main/java/app/closer/ui/dates/BucketListScreen.kt b/app/src/main/java/app/closer/ui/dates/BucketListScreen.kt index dae8cbbf..4a64f7d8 100644 --- a/app/src/main/java/app/closer/ui/dates/BucketListScreen.kt +++ b/app/src/main/java/app/closer/ui/dates/BucketListScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.dates +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll @@ -89,11 +91,7 @@ private fun BucketListContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { Column( @@ -135,7 +133,7 @@ private fun BucketListContent( .padding(20.dp) .align(Alignment.BottomEnd), containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ) { Text(text = "+", style = MaterialTheme.typography.titleLarge) } @@ -180,14 +178,14 @@ private fun Header( Text( text = "Our Bucket List", style = MaterialTheme.typography.displaySmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) Text( text = "Dream dates you both want to experience", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 2, overflow = TextOverflow.Ellipsis ) @@ -244,7 +242,7 @@ private fun FilterChip( text = label, modifier = Modifier.padding(horizontal = 14.dp, vertical = 8.dp), style = MaterialTheme.typography.labelMedium, - color = if (selected) Color(0xFF271236) else Color(0xFF5A5060), + color = if (selected) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium ) } @@ -287,7 +285,7 @@ private fun BucketListItemCard( Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.92f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.92f)), elevation = CardDefaults.cardElevation(defaultElevation = 3.dp), onClick = { onToggleComplete(item.id) } ) { @@ -324,9 +322,9 @@ private fun BucketListItemCard( } ), color = if (item.isCompleted) { - Color(0xFF5A5060).copy(alpha = 0.6f) + MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.6f) } else { - Color(0xFF261D2E) + MaterialTheme.colorScheme.onSurface }, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -345,7 +343,7 @@ private fun BucketListItemCard( Text( text = item.description, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -399,13 +397,13 @@ private fun EmptyState( Text( text = "No bucket list items yet", style = MaterialTheme.typography.titleMedium, - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( text = "Tap the + button to add your first dream date!", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = androidx.compose.ui.text.style.TextAlign.Center ) } @@ -438,7 +436,7 @@ private fun AddItemDialog( Text( text = "Add to Bucket List", style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) OutlinedTextField( @@ -483,7 +481,7 @@ private fun AddItemDialog( containerColor = Color(0xFFE3D4EB) ) ) { - Text("Cancel", color = Color(0xFF5A5060)) + Text("Cancel", color = MaterialTheme.colorScheme.onSurfaceVariant) } Button( @@ -492,7 +490,7 @@ private fun AddItemDialog( shape = RoundedCornerShape(16.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ) ) { Text("Add to List") @@ -521,7 +519,7 @@ private fun CategoryChip( text = label, modifier = Modifier.padding(horizontal = 12.dp, vertical = 7.dp), style = MaterialTheme.typography.labelSmall, - color = if (selected) Color(0xFF271236) else Color(0xFF5A5060), + color = if (selected) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium, maxLines = 1, overflow = TextOverflow.Ellipsis diff --git a/app/src/main/java/app/closer/ui/dates/DateBuilderScreen.kt b/app/src/main/java/app/closer/ui/dates/DateBuilderScreen.kt index 7062ee1b..ac105df9 100644 --- a/app/src/main/java/app/closer/ui/dates/DateBuilderScreen.kt +++ b/app/src/main/java/app/closer/ui/dates/DateBuilderScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.dates +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -83,11 +85,7 @@ private fun DateBuilderContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { Column( @@ -139,14 +137,14 @@ private fun Header( text = "Plan a Date", modifier = Modifier.weight(1f), style = MaterialTheme.typography.displaySmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) Text( text = "Tell us what you're looking for", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -168,7 +166,7 @@ private fun InputCard( Surface( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp), - color = Color.White.copy(alpha = 0.86f), + color = closerCardColor(alpha = 0.86f), tonalElevation = 0.dp, shadowElevation = 2.dp ) { @@ -292,13 +290,13 @@ private fun DateTimeField( Text( text = label, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = FontWeight.Medium ) Text( text = value, style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -321,7 +319,7 @@ private fun BudgetField( Text( text = "Budget", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = FontWeight.Medium ) @@ -368,7 +366,7 @@ private fun DurationSelector( Text( text = "Duration", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = FontWeight.Medium ) @@ -412,7 +410,7 @@ private fun DurationChip( text = label, modifier = Modifier.padding(horizontal = 14.dp, vertical = 8.dp), style = MaterialTheme.typography.labelMedium, - color = if (selected) Color(0xFF271236) else Color(0xFF5A5060), + color = if (selected) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium ) } @@ -429,7 +427,7 @@ private fun SaveButton( shape = RoundedCornerShape(16.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ) ) { Text("Create Plan") diff --git a/app/src/main/java/app/closer/ui/dates/DateMatchScreen.kt b/app/src/main/java/app/closer/ui/dates/DateMatchScreen.kt index 2c57316d..6c2703e7 100644 --- a/app/src/main/java/app/closer/ui/dates/DateMatchScreen.kt +++ b/app/src/main/java/app/closer/ui/dates/DateMatchScreen.kt @@ -1,5 +1,6 @@ package app.closer.ui.dates +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.spring import androidx.compose.foundation.background @@ -95,11 +96,7 @@ private fun DateMatchContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { Column( @@ -214,14 +211,14 @@ private fun DateMatchHeader( Text( text = "Date Match", style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) Text( text = partnerName?.let { "Swiping with $it" } ?: "Find something you both love", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -358,7 +355,7 @@ private fun DateCard( Text( text = idea.title, style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -366,7 +363,7 @@ private fun DateCard( Text( text = idea.description, style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 6, overflow = TextOverflow.Ellipsis ) @@ -439,7 +436,7 @@ private fun InfoChip(label: String) { text = label, modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp), style = MaterialTheme.typography.labelMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -525,7 +522,7 @@ private fun MatchOverlay( Box( modifier = Modifier .fillMaxSize() - .background(Color(0xFF261D2E).copy(alpha = 0.54f)) + .background(MaterialTheme.colorScheme.onSurface.copy(alpha = 0.54f)) .padding(24.dp), contentAlignment = Alignment.Center ) { @@ -556,7 +553,7 @@ private fun MatchOverlay( Text( text = "It is a match!", style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( @@ -566,7 +563,7 @@ private fun MatchOverlay( append(" both loved this idea.") }, style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) match.dateIdea?.let { idea -> @@ -599,7 +596,7 @@ private fun MatchOverlay( shape = RoundedCornerShape(16.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ) ) { Text("View matches") diff --git a/app/src/main/java/app/closer/ui/dates/DateMatchesScreen.kt b/app/src/main/java/app/closer/ui/dates/DateMatchesScreen.kt index a899baf1..9b608867 100644 --- a/app/src/main/java/app/closer/ui/dates/DateMatchesScreen.kt +++ b/app/src/main/java/app/closer/ui/dates/DateMatchesScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.dates +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -70,11 +72,7 @@ private fun DateMatchesContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { LazyColumn( @@ -96,13 +94,13 @@ private fun DateMatchesContent( Text( text = "Your Matches", style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( text = state.partnerName?.let { "Ideas you and $it both love" } ?: "Mutual love matches appear here", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } } @@ -200,7 +198,7 @@ private fun SectionHeader( Text( text = title, style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) } Surface( @@ -211,7 +209,7 @@ private fun SectionHeader( text = count.toString(), modifier = Modifier.padding(horizontal = 11.dp, vertical = 5.dp), style = MaterialTheme.typography.labelMedium, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } } @@ -290,7 +288,7 @@ private fun IdeaCard( Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.92f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.92f)), elevation = CardDefaults.cardElevation(defaultElevation = 3.dp) ) { Column( @@ -324,7 +322,7 @@ private fun IdeaCard( Text( text = idea.title, style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 2, overflow = TextOverflow.Ellipsis ) @@ -332,7 +330,7 @@ private fun IdeaCard( Text( text = idea.description, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -364,7 +362,7 @@ private fun InfoChip( text = label, modifier = Modifier.padding(horizontal = 10.dp, vertical = 6.dp), style = MaterialTheme.typography.labelMedium, - color = if (emphasis) Color(0xFF8A226F) else Color(0xFF5A5060), + color = if (emphasis) Color(0xFF8A226F) else MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = if (emphasis) FontWeight.SemiBold else FontWeight.Medium ) } diff --git a/app/src/main/java/app/closer/ui/desiresync/DesireSyncScreen.kt b/app/src/main/java/app/closer/ui/desiresync/DesireSyncScreen.kt index b6ac6ec9..b60d9e37 100644 --- a/app/src/main/java/app/closer/ui/desiresync/DesireSyncScreen.kt +++ b/app/src/main/java/app/closer/ui/desiresync/DesireSyncScreen.kt @@ -1,5 +1,6 @@ package app.closer.ui.desiresync +import app.closer.ui.theme.closerCardColor import android.util.Log import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.tween @@ -332,7 +333,7 @@ private fun DSIntroScreen(playerNumber: Int, total: Int, onReady: () -> Unit) { else "Your turn. Same questions, your side.\nYour answers are private until the reveal.", style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center ) Spacer(Modifier.height(8.dp)) @@ -372,14 +373,14 @@ private fun DSHandoffScreen(onReady: () -> Unit) { Text( text = "Pass the phone!", style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center ) Spacer(Modifier.height(10.dp)) Text( text = "Partner A is done. Hand the phone to Partner B — keep your answers secret until the reveal.", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.Center ) Spacer(Modifier.height(36.dp)) @@ -444,14 +445,14 @@ private fun DSAnswerScreen( Card( modifier = Modifier.fillMaxWidth().weight(1f), shape = RoundedCornerShape(28.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.92f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.92f)), elevation = CardDefaults.cardElevation(8.dp) ) { Box(modifier = Modifier.fillMaxSize().padding(28.dp), contentAlignment = Alignment.Center) { Text( text = question.text, style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center, maxLines = 5, overflow = TextOverflow.Ellipsis @@ -529,7 +530,7 @@ private fun DSRevealScreen( Text( text = if (matches.isEmpty()) "Nothing in common this round" else "${matches.size} shared desire${if (matches.size != 1) "s" else ""}", style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center ) if (total - matches.size > 0) { diff --git a/app/src/main/java/app/closer/ui/home/HomeScreen.kt b/app/src/main/java/app/closer/ui/home/HomeScreen.kt index c8af2fae..a0bca2a1 100644 --- a/app/src/main/java/app/closer/ui/home/HomeScreen.kt +++ b/app/src/main/java/app/closer/ui/home/HomeScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.home +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -80,11 +82,7 @@ private fun HomeContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { Column( @@ -158,7 +156,7 @@ private fun HomeHeader( Text( text = "For tonight", style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, modifier = Modifier.weight(1f) ) if (streakCount > 0) { @@ -171,7 +169,7 @@ private fun HomeHeader( else "Open the app, see what matters, and take one small step toward closeness.", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -190,7 +188,7 @@ private fun PrimaryHomeActionCard( Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(32.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.92f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.92f)), elevation = CardDefaults.cardElevation(defaultElevation = 18.dp) ) { Column( @@ -240,7 +238,7 @@ private fun PrimaryHomeActionCard( Text( text = action.title, style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -322,7 +320,7 @@ private fun PulseMetric( Text( text = label, style = MaterialTheme.typography.labelMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -398,14 +396,14 @@ private fun SecondaryHomeActionCard( Text( text = action.title, style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) Text( text = action.body, style = MaterialTheme.typography.bodySmall, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 2, overflow = TextOverflow.Ellipsis ) @@ -445,12 +443,12 @@ private fun MomentCueCard() { Text( text = "Keep important days close without turning them into chores.", style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( text = "Birthdays, anniversaries, and planned moments will sit here as gentle cues once they are saved.", style = MaterialTheme.typography.bodySmall, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -560,7 +558,7 @@ private fun CategoryMiniCard( onClick = onClick, modifier = modifier, shape = RoundedCornerShape(22.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.82f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.82f)), elevation = CardDefaults.cardElevation(defaultElevation = 4.dp) ) { Column( @@ -576,7 +574,7 @@ private fun CategoryMiniCard( Text( text = item.category.displayName.ifBlank { item.category.id.displayCategoryName() }, style = MaterialTheme.typography.titleSmall, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold, maxLines = 2, overflow = TextOverflow.Ellipsis @@ -584,7 +582,7 @@ private fun CategoryMiniCard( Text( text = "${item.questionCount} prompts", style = MaterialTheme.typography.labelMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -597,7 +595,7 @@ private fun LoadingHomeCard() { Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(26.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.84f)) + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.84f)) ) { Row( modifier = Modifier.padding(22.dp), @@ -608,7 +606,7 @@ private fun LoadingHomeCard() { Text( text = "Opening your dashboard", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } } @@ -622,7 +620,7 @@ private fun ErrorHomeCard( Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(26.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.84f)) + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.84f)) ) { Column( modifier = Modifier.padding(20.dp), @@ -631,20 +629,20 @@ private fun ErrorHomeCard( Text( text = "Home paused", style = MaterialTheme.typography.titleMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold ) Text( text = message, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) Button( onClick = onRefresh, shape = RoundedCornerShape(16.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ) ) { Text("Retry") @@ -663,7 +661,7 @@ private fun HomePill(label: String) { text = label, modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), style = MaterialTheme.typography.labelMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) diff --git a/app/src/main/java/app/closer/ui/howwell/HowWellScreen.kt b/app/src/main/java/app/closer/ui/howwell/HowWellScreen.kt index 095fbb44..3ba0ad7d 100644 --- a/app/src/main/java/app/closer/ui/howwell/HowWellScreen.kt +++ b/app/src/main/java/app/closer/ui/howwell/HowWellScreen.kt @@ -1,5 +1,6 @@ package app.closer.ui.howwell +import app.closer.ui.theme.closerCardColor import android.util.Log import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -334,7 +335,7 @@ private fun PlayerIntroScreen(playerNumber: Int, total: Int, onReady: () -> Unit else "For each question, guess what your partner answered.\nNo peeking!", style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center, lineHeight = MaterialTheme.typography.headlineSmall.lineHeight ) @@ -377,14 +378,14 @@ private fun HandoffScreen(onReady: () -> Unit) { Text( text = "Pass the phone!", style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center ) Spacer(Modifier.height(10.dp)) Text( text = "Player 1 is done. Hand the phone to Player 2 — keep your answers secret!", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.Center ) Spacer(Modifier.height(36.dp)) @@ -449,7 +450,7 @@ private fun AnswerScreen( Card( modifier = Modifier.fillMaxWidth().weight(1f), shape = RoundedCornerShape(28.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.9f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.9f)), elevation = CardDefaults.cardElevation(8.dp) ) { Box(modifier = Modifier.fillMaxSize().padding(24.dp), contentAlignment = Alignment.Center) { @@ -471,7 +472,7 @@ private fun AnswerScreen( Text( text = question.text, style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center, maxLines = 5, overflow = TextOverflow.Ellipsis @@ -596,7 +597,7 @@ private fun RevealScreen( Text( text = result.question.text, style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -708,7 +709,7 @@ private fun CompleteScreen( Text( text = scoreLabel(score, total), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center ) } diff --git a/app/src/main/java/app/closer/ui/paywall/PaywallScreen.kt b/app/src/main/java/app/closer/ui/paywall/PaywallScreen.kt index fd62e548..507d9d48 100644 --- a/app/src/main/java/app/closer/ui/paywall/PaywallScreen.kt +++ b/app/src/main/java/app/closer/ui/paywall/PaywallScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.paywall +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import android.app.Activity import android.content.Context import android.content.ContextWrapper @@ -69,12 +71,6 @@ private val BENEFITS = listOf( "Exportable memories" ) -private val BACKGROUND_GRADIENT = Brush.linearGradient( - colors = listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite -) - @Composable fun PaywallScreen( onNavigate: (String) -> Unit = {}, @@ -94,7 +90,7 @@ fun PaywallScreen( Box( modifier = Modifier .fillMaxSize() - .background(BACKGROUND_GRADIENT) + .background(closerBackgroundBrush()) ) { Column( modifier = Modifier @@ -174,13 +170,13 @@ private fun HeaderSection( Text( text = "Go deeper together", style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Spacer(modifier = Modifier.height(6.dp)) Text( text = "Unlock everything Closer has built for couples.", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } @@ -199,7 +195,7 @@ private fun BenefitsCard(modifier: Modifier = Modifier) { Card( modifier = modifier.fillMaxWidth(), shape = RoundedCornerShape(28.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.88f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.88f)), elevation = CardDefaults.cardElevation(defaultElevation = 10.dp) ) { Column( @@ -209,7 +205,7 @@ private fun BenefitsCard(modifier: Modifier = Modifier) { Text( text = "What's included", style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) BENEFITS.forEach { benefit -> Row( @@ -225,7 +221,7 @@ private fun BenefitsCard(modifier: Modifier = Modifier) { Text( text = benefit, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) } } @@ -253,14 +249,14 @@ private fun PlanOptions( Text( text = "Choose your plan", style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) if (packages.isEmpty()) { Text( text = "No plans available right now.", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } else { packages.forEach { pkg -> @@ -313,12 +309,12 @@ private fun PlanRow( Text( text = pkg.product.title, style = MaterialTheme.typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( text = pkg.product.description, style = MaterialTheme.typography.bodySmall, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } @@ -349,9 +345,9 @@ private fun ActionButtons( shape = RoundedCornerShape(16.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236), + contentColor = MaterialTheme.colorScheme.onPrimary, disabledContainerColor = Color(0xFFB98AF4).copy(alpha = 0.40f), - disabledContentColor = Color(0xFF271236).copy(alpha = 0.54f) + disabledContentColor = MaterialTheme.colorScheme.onPrimary.copy(alpha = 0.54f) ) ) { Text("Continue", fontWeight = FontWeight.SemiBold) @@ -402,12 +398,12 @@ private fun ThankYouOverlay(onDismiss: () -> Unit) { Box( modifier = Modifier .fillMaxSize() - .background(Color(0xFF261D2E).copy(alpha = 0.54f)), + .background(MaterialTheme.colorScheme.onSurface.copy(alpha = 0.54f)), contentAlignment = Alignment.Center ) { Card( shape = RoundedCornerShape(28.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.96f)) + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.96f)) ) { Column( modifier = Modifier.padding(28.dp), @@ -423,12 +419,12 @@ private fun ThankYouOverlay(onDismiss: () -> Unit) { Text( text = "You're all set", style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( text = "Thank you for supporting Closer.", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.Center ) Button( @@ -436,7 +432,7 @@ private fun ThankYouOverlay(onDismiss: () -> Unit) { shape = RoundedCornerShape(16.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ) ) { Text("Continue") diff --git a/app/src/main/java/app/closer/ui/questions/LocalQuestionContent.kt b/app/src/main/java/app/closer/ui/questions/LocalQuestionContent.kt index 5279ed3e..0b550cbc 100644 --- a/app/src/main/java/app/closer/ui/questions/LocalQuestionContent.kt +++ b/app/src/main/java/app/closer/ui/questions/LocalQuestionContent.kt @@ -1,5 +1,6 @@ package app.closer.ui.questions +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -66,11 +67,7 @@ fun LocalQuestionContent( onRefresh: (() -> Unit)? = null, modifier: Modifier = Modifier ) { - val background = Brush.linearGradient( - colors = listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + val background = closerBackgroundBrush() Box( modifier = modifier @@ -185,12 +182,12 @@ private fun LocalQuestionHeader( Text( text = title, style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( text = subtitle, style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -221,7 +218,7 @@ private fun MetaPill(label: String) { text = label, modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp), style = MaterialTheme.typography.labelMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -262,13 +259,13 @@ private fun SubmittedAnswerCard( Text( text = "Private answer saved", style = MaterialTheme.typography.titleSmall, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold ) Text( text = answerSummary(question, state), style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 2, overflow = TextOverflow.Ellipsis ) diff --git a/app/src/main/java/app/closer/ui/questions/QuestionCategoryScreen.kt b/app/src/main/java/app/closer/ui/questions/QuestionCategoryScreen.kt index 925f8f8f..58504c1b 100644 --- a/app/src/main/java/app/closer/ui/questions/QuestionCategoryScreen.kt +++ b/app/src/main/java/app/closer/ui/questions/QuestionCategoryScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.questions +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll @@ -85,11 +87,7 @@ private fun QuestionCategoryContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { LazyColumn( @@ -189,7 +187,7 @@ private fun CategoryHero( Text( text = title, style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 2, overflow = TextOverflow.Ellipsis ) @@ -197,7 +195,7 @@ private fun CategoryHero( text = category?.description ?: "Browse prompts for this kind of conversation.", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -232,7 +230,7 @@ private fun CategoryFilters( Text( text = "Format", style = MaterialTheme.typography.labelMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = FontWeight.SemiBold ) Row( @@ -280,7 +278,7 @@ private fun FilterPill( text = label, modifier = Modifier.padding(horizontal = 13.dp, vertical = 8.dp), style = MaterialTheme.typography.labelMedium, - color = if (selected) Color(0xFF56306F) else Color(0xFF261D2E), + color = if (selected) Color(0xFF56306F) else MaterialTheme.colorScheme.onSurface, fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -300,7 +298,7 @@ private fun DepthHeader(depth: Int, count: Int) { Text( text = "Depth $depth", style = MaterialTheme.typography.titleMedium, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold ) CategoryPill("$count ${if (count == 1) "prompt" else "prompts"}") @@ -316,7 +314,7 @@ private fun QuestionListCard( onClick = onClick, modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(20.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.9f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.9f)), elevation = CardDefaults.cardElevation(defaultElevation = 3.dp) ) { Column( @@ -327,7 +325,7 @@ private fun QuestionListCard( text = question.text, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.SemiBold, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -357,7 +355,7 @@ private fun CategoryPill( text = label, modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), style = MaterialTheme.typography.labelMedium, - color = if (emphasis) Color(0xFF56306F) else Color(0xFF261D2E), + color = if (emphasis) Color(0xFF56306F) else MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -369,7 +367,7 @@ private fun CategoryLoadingCard() { Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.82f)) + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.82f)) ) { Row( modifier = Modifier.padding(22.dp), @@ -380,7 +378,7 @@ private fun CategoryLoadingCard() { Text( text = "Loading prompts", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -393,7 +391,7 @@ private fun CategoryMessageCard(title: String, message: String) { Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.82f)) + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.82f)) ) { Column( modifier = Modifier.padding(22.dp), @@ -403,14 +401,14 @@ private fun CategoryMessageCard(title: String, message: String) { text = title, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.SemiBold, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) Text( text = message, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 4, overflow = TextOverflow.Ellipsis ) diff --git a/app/src/main/java/app/closer/ui/questions/QuestionPackLibraryScreen.kt b/app/src/main/java/app/closer/ui/questions/QuestionPackLibraryScreen.kt index e81451c1..52b2d850 100644 --- a/app/src/main/java/app/closer/ui/questions/QuestionPackLibraryScreen.kt +++ b/app/src/main/java/app/closer/ui/questions/QuestionPackLibraryScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.questions +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll @@ -90,11 +92,7 @@ private fun QuestionPackLibraryContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { LazyColumn( @@ -113,14 +111,14 @@ private fun QuestionPackLibraryContent( Text( text = "Pick a doorway", style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 2, overflow = TextOverflow.Ellipsis ) Text( text = "Choose a question pack by the kind of conversation you want to open together.", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -180,7 +178,7 @@ private fun QuestionPackLibraryContent( shape = RoundedCornerShape(16.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ) ) { Text("Unlock all packs") @@ -200,7 +198,7 @@ private fun QuestionPackCard( val containerColor = if (item.isLocked) Color(0xFFFFF8FC).copy(alpha = 0.9f) else - Color.White.copy(alpha = 0.9f) + closerCardColor(alpha = 0.9f) val accent = packAccent(item.category.id) Card( @@ -242,7 +240,7 @@ private fun QuestionPackCard( Text( text = item.category.displayName.ifBlank { item.category.id.displayCategoryName() }, style = MaterialTheme.typography.titleLarge, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, fontWeight = FontWeight.SemiBold, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -250,7 +248,7 @@ private fun QuestionPackCard( Text( text = item.category.description, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 2, overflow = TextOverflow.Ellipsis ) @@ -312,7 +310,7 @@ private fun FilterPill( text = label, modifier = Modifier.padding(horizontal = 13.dp, vertical = 8.dp), style = MaterialTheme.typography.labelMedium, - color = if (selected) Color(0xFF56306F) else Color(0xFF261D2E), + color = if (selected) Color(0xFF56306F) else MaterialTheme.colorScheme.onSurface, fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -334,7 +332,7 @@ private fun PackPill( text = label, modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), style = MaterialTheme.typography.labelMedium, - color = if (emphasis) Color(0xFF56306F) else Color(0xFF261D2E), + color = if (emphasis) Color(0xFF56306F) else MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -373,7 +371,7 @@ private fun LoadingPackCard() { Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(26.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.82f)) + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.82f)) ) { Row( modifier = Modifier.padding(22.dp), @@ -384,7 +382,7 @@ private fun LoadingPackCard() { Text( text = "Loading question packs", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -397,7 +395,7 @@ private fun PackMessageCard(title: String, message: String) { Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(26.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.82f)) + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.82f)) ) { Column( modifier = Modifier.padding(22.dp), @@ -407,14 +405,14 @@ private fun PackMessageCard(title: String, message: String) { text = title, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.SemiBold, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) Text( text = message, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 4, overflow = TextOverflow.Ellipsis ) diff --git a/app/src/main/java/app/closer/ui/settings/SettingsVisuals.kt b/app/src/main/java/app/closer/ui/settings/SettingsVisuals.kt index 6ec8f063..b4dfc75a 100644 --- a/app/src/main/java/app/closer/ui/settings/SettingsVisuals.kt +++ b/app/src/main/java/app/closer/ui/settings/SettingsVisuals.kt @@ -14,7 +14,7 @@ import app.closer.ui.theme.PrimaryColor internal val SettingsBackgroundBrush: Brush get() = Brush.linearGradient( - colors = listOf(BackgroundColor, CloserPalette.PurpleSoft, CloserPalette.PinkMist), + colors = listOf(BackgroundColor, CloserPalette.BackgroundWash, CloserPalette.PinkMist), start = Offset.Zero, end = Offset.Infinite ) diff --git a/app/src/main/java/app/closer/ui/theme/CloserPalette.kt b/app/src/main/java/app/closer/ui/theme/CloserPalette.kt index 235102e3..6d8607c5 100644 --- a/app/src/main/java/app/closer/ui/theme/CloserPalette.kt +++ b/app/src/main/java/app/closer/ui/theme/CloserPalette.kt @@ -7,6 +7,7 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color object CloserPalette { + val BackgroundWash = Color(0xFFF8F1FF) val PurpleDeep = Color(0xFF56306F) val PurpleRich = Color(0xFF8F67C5) val PurpleSoft = Color(0xFFF4E8FF) @@ -29,13 +30,39 @@ fun closerBackgroundBrush(): Brush = Brush.linearGradient( colors = listOf( MaterialTheme.colorScheme.background, - CloserPalette.PurpleSoft, + CloserPalette.BackgroundWash, CloserPalette.PinkMist ), start = Offset.Zero, end = Offset.Infinite ) +@Composable +fun closerInkColor(): Color = MaterialTheme.colorScheme.onSurface + +@Composable +fun closerMutedColor(): Color = MaterialTheme.colorScheme.onSurfaceVariant + +@Composable +fun closerActionTextColor(): Color = MaterialTheme.colorScheme.onPrimary + +@Composable +fun closerCardColor(alpha: Float = 0.9f): Color = + MaterialTheme.colorScheme.surface.copy(alpha = alpha) + +@Composable +fun closerQuietCardColor(): Color = closerCardColor(alpha = 0.82f) + +@Composable +fun closerElevatedCardColor(): Color = closerCardColor(alpha = 0.92f) + +@Composable +fun closerSolidCardColor(): Color = MaterialTheme.colorScheme.surface + +@Composable +fun closerScrimColor(alpha: Float = 0.54f): Color = + MaterialTheme.colorScheme.onSurface.copy(alpha = alpha) + @Composable fun closerPlayCardBrush(): Brush = Brush.linearGradient( diff --git a/app/src/main/java/app/closer/ui/thisorthat/ThisOrThatScreen.kt b/app/src/main/java/app/closer/ui/thisorthat/ThisOrThatScreen.kt index 2ed0efbe..0719d7d5 100644 --- a/app/src/main/java/app/closer/ui/thisorthat/ThisOrThatScreen.kt +++ b/app/src/main/java/app/closer/ui/thisorthat/ThisOrThatScreen.kt @@ -1,5 +1,6 @@ package app.closer.ui.thisorthat +import app.closer.ui.theme.closerCardColor import android.util.Log import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.RepeatMode @@ -250,7 +251,7 @@ private fun ThisOrThatContent( .fillMaxWidth() .weight(1f), shape = RoundedCornerShape(28.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.9f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.9f)), elevation = CardDefaults.cardElevation(defaultElevation = 8.dp) ) { Box( @@ -281,7 +282,7 @@ private fun ThisOrThatContent( Text( text = question.text, style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center, maxLines = 5, overflow = TextOverflow.Ellipsis @@ -520,13 +521,13 @@ private fun ThisOrThatComplete( Text( text = "All done!", style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center ) Text( text = "You went through $total prompts.", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.Center ) } @@ -535,7 +536,7 @@ private fun ThisOrThatComplete( Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.88f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.88f)), elevation = CardDefaults.cardElevation(6.dp) ) { Row( @@ -630,7 +631,7 @@ private fun TallyItem(label: String, count: Int, color: Color) { Text( text = "picked $label", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } } diff --git a/app/src/main/java/app/closer/ui/wheel/SpinWheelScreen.kt b/app/src/main/java/app/closer/ui/wheel/SpinWheelScreen.kt index fc01388e..93641046 100644 --- a/app/src/main/java/app/closer/ui/wheel/SpinWheelScreen.kt +++ b/app/src/main/java/app/closer/ui/wheel/SpinWheelScreen.kt @@ -1,5 +1,6 @@ package app.closer.ui.wheel +import app.closer.ui.theme.closerCardColor import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.RepeatMode import androidx.compose.animation.core.animateFloat @@ -241,6 +242,7 @@ private fun WheelSpinner( animationSpec = tween(durationMillis = 160), label = "wheel_pointer_scale" ) + val wheelRingColor = closerCardColor(alpha = 0.84f) Box( modifier = Modifier @@ -267,7 +269,7 @@ private fun WheelSpinner( radius = size.minDimension * 0.24f ) drawCircle( - color = Color.White.copy(alpha = 0.84f), + color = wheelRingColor, style = Stroke(width = 7.dp.toPx()) ) } diff --git a/app/src/main/java/app/closer/ui/wheel/WheelCompleteScreen.kt b/app/src/main/java/app/closer/ui/wheel/WheelCompleteScreen.kt index 0c40507b..f9fe79df 100644 --- a/app/src/main/java/app/closer/ui/wheel/WheelCompleteScreen.kt +++ b/app/src/main/java/app/closer/ui/wheel/WheelCompleteScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.wheel +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import app.closer.core.navigation.AppRoute @@ -106,11 +108,7 @@ private fun WheelCompleteContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ), contentAlignment = Alignment.Center ) { @@ -138,7 +136,7 @@ private fun WheelCompleteContent( Text( text = "Session complete", style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center, maxLines = 2, overflow = TextOverflow.Ellipsis @@ -147,7 +145,7 @@ private fun WheelCompleteContent( Text( text = categoryName, style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.Center, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -159,7 +157,7 @@ private fun WheelCompleteContent( Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.88f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.88f)), elevation = CardDefaults.cardElevation(defaultElevation = 6.dp) ) { Column( @@ -175,7 +173,7 @@ private fun WheelCompleteContent( Text( text = "of $total questions", style = MaterialTheme.typography.bodyLarge, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) diff --git a/app/src/main/java/app/closer/ui/wheel/WheelHistoryScreen.kt b/app/src/main/java/app/closer/ui/wheel/WheelHistoryScreen.kt index 0fb44d7f..4b2def6c 100644 --- a/app/src/main/java/app/closer/ui/wheel/WheelHistoryScreen.kt +++ b/app/src/main/java/app/closer/ui/wheel/WheelHistoryScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.wheel +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -76,11 +78,7 @@ fun WheelHistoryScreen( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { LazyColumn( @@ -96,7 +94,7 @@ fun WheelHistoryScreen( Text( text = "Spin sessions", style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, modifier = Modifier.padding(top = 20.dp, bottom = 4.dp) ) } @@ -134,7 +132,7 @@ private fun WheelSessionCard(session: QuestionSession) { Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(20.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.88f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.88f)), elevation = CardDefaults.cardElevation(defaultElevation = 4.dp) ) { Row( @@ -147,12 +145,12 @@ private fun WheelSessionCard(session: QuestionSession) { text = session.categoryId.displayCategoryName(), style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.SemiBold, - color = Color(0xFF261D2E) + color = MaterialTheme.colorScheme.onSurface ) Text( text = "${session.questionIds.size} questions", style = MaterialTheme.typography.bodySmall, - color = Color(0xFF5A5060) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } session.completedAt?.let { ts -> @@ -171,7 +169,7 @@ private fun WheelHistoryLockedCard(onUnlock: () -> Unit) { Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.86f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.86f)), elevation = CardDefaults.cardElevation(defaultElevation = 6.dp) ) { Column( @@ -194,14 +192,14 @@ private fun WheelHistoryLockedCard(onUnlock: () -> Unit) { text = "History is a premium feature", style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.SemiBold, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 2, overflow = TextOverflow.Ellipsis ) Text( text = "Unlock to browse all your past spin wheel sessions together.", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis ) @@ -213,10 +211,10 @@ private fun WheelHistoryLockedCard(onUnlock: () -> Unit) { shape = RoundedCornerShape(16.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFFB98AF4), - contentColor = Color(0xFF271236) + contentColor = MaterialTheme.colorScheme.onPrimary ) ) { - Text("Unlock premium", color = Color(0xFF271236)) + Text("Unlock premium", color = MaterialTheme.colorScheme.onPrimary) } } } diff --git a/app/src/main/java/app/closer/ui/wheel/WheelSessionScreen.kt b/app/src/main/java/app/closer/ui/wheel/WheelSessionScreen.kt index 053a2f4f..7c5a0280 100644 --- a/app/src/main/java/app/closer/ui/wheel/WheelSessionScreen.kt +++ b/app/src/main/java/app/closer/ui/wheel/WheelSessionScreen.kt @@ -1,5 +1,7 @@ package app.closer.ui.wheel +import app.closer.ui.theme.closerCardColor +import app.closer.ui.theme.closerBackgroundBrush import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -73,11 +75,7 @@ private fun WheelSessionContent( modifier = Modifier .fillMaxSize() .background( - Brush.linearGradient( - listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)), - start = Offset.Zero, - end = Offset.Infinite - ) + closerBackgroundBrush() ) ) { Column( @@ -141,7 +139,7 @@ private fun WheelSessionContent( .fillMaxWidth() .weight(1f), shape = RoundedCornerShape(28.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.88f)), + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.88f)), elevation = CardDefaults.cardElevation(defaultElevation = 10.dp) ) { Box( @@ -153,7 +151,7 @@ private fun WheelSessionContent( Text( text = question?.text ?: "", style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold), - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, textAlign = TextAlign.Center, lineHeight = MaterialTheme.typography.titleLarge.lineHeight, maxLines = 8, @@ -211,7 +209,7 @@ private fun EmptySessionCard() { Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp), - colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.84f)) + colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.84f)) ) { Column( modifier = Modifier.padding(24.dp), @@ -221,14 +219,14 @@ private fun EmptySessionCard() { "No active session", style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.SemiBold, - color = Color(0xFF261D2E), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) Text( "Go back to the category picker and spin the wheel to start.", style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF5A5060), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 3, overflow = TextOverflow.Ellipsis )