refactor: comprehensive UI polish across 26 files — components, screens, theme consistency

This commit is contained in:
null 2026-06-17 22:44:14 -05:00
parent d135b306aa
commit 370a56069f
26 changed files with 253 additions and 260 deletions

View File

@ -1,5 +1,6 @@
package app.closer.ui.answers package app.closer.ui.answers
import app.closer.ui.theme.closerBackgroundBrush
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -106,11 +107,7 @@ private fun AnswerHistoryContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
LazyColumn( LazyColumn(
@ -129,12 +126,12 @@ private fun AnswerHistoryContent(
Text( Text(
text = "What you have opened", text = "What you have opened",
style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
text = "Private answers and revealed reflections, gathered in one place.", text = "Private answers and revealed reflections, gathered in one place.",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
} }
@ -201,7 +198,7 @@ private fun AnswerHistoryCard(
Text( Text(
text = answer.questionText, text = answer.questionText,
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -209,7 +206,7 @@ private fun AnswerHistoryCard(
Text( Text(
text = if (answer.isRevealed) answer.revealSummary() else "Saved privately. Tap to reveal.", text = if (answer.isRevealed) answer.revealSummary() else "Saved privately. Tap to reveal.",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -248,7 +245,7 @@ private fun HistoryPill(label: String) {
text = label, text = label,
modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
} }
} }

View File

@ -1,5 +1,6 @@
package app.closer.ui.answers package app.closer.ui.answers
import app.closer.ui.theme.closerBackgroundBrush
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -81,11 +82,7 @@ private fun AnswerRevealContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
Column( Column(
@ -113,7 +110,7 @@ private fun AnswerRevealContent(
Text( Text(
text = state.error, text = state.error,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
state.answer == null -> NoAnswerState( state.answer == null -> NoAnswerState(
@ -152,7 +149,7 @@ private fun NoAnswerState(
Text( Text(
text = question?.text ?: "This prompt is ready when you are.", text = question?.text ?: "This prompt is ready when you are.",
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
maxLines = 4, maxLines = 4,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -160,7 +157,7 @@ private fun NoAnswerState(
Text( Text(
text = "Answer privately first. Reveal can wait until there is something worth opening together.", text = "Answer privately first. Reveal can wait until there is something worth opening together.",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -205,7 +202,7 @@ private fun ReadyToRevealState(
Text( Text(
text = question?.text ?: answer.questionText, text = question?.text ?: answer.questionText,
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
maxLines = 4, maxLines = 4,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -214,7 +211,7 @@ private fun ReadyToRevealState(
Text( Text(
text = "No rush. Reveal this only when you want the conversation to open.", text = "No rush. Reveal this only when you want the conversation to open.",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -263,7 +260,7 @@ private fun RevealedState(
Text( Text(
text = question?.text ?: answer.questionText, text = question?.text ?: answer.questionText,
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
maxLines = 4, maxLines = 4,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -317,14 +314,14 @@ private fun RevealHeader() {
Text( Text(
text = "Reveal together", text = "Reveal together",
style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
text = "A saved answer can stay private, become a shared reflection, or simply wait for the right moment.", text = "A saved answer can stay private, become a shared reflection, or simply wait for the right moment.",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 4, maxLines = 4,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -373,7 +370,7 @@ private fun RevealPill(label: String) {
text = label, text = label,
modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )

View File

@ -1,5 +1,6 @@
package app.closer.ui.auth package app.closer.ui.auth
import app.closer.ui.theme.closerCardColor
import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Offset
@ -14,7 +15,7 @@ import app.closer.ui.theme.PrimaryColor
internal val AuthBackgroundBrush: Brush internal val AuthBackgroundBrush: Brush
get() = Brush.linearGradient( get() = Brush.linearGradient(
colors = listOf(BackgroundColor, CloserPalette.PurpleSoft, CloserPalette.PinkMist), colors = listOf(BackgroundColor, CloserPalette.BackgroundWash, CloserPalette.PinkMist),
start = Offset.Zero, start = Offset.Zero,
end = Offset.Infinite end = Offset.Infinite
) )
@ -32,7 +33,7 @@ internal fun authTextFieldColors() = OutlinedTextFieldDefaults.colors(
focusedLabelColor = AuthPrimaryDeep, focusedLabelColor = AuthPrimaryDeep,
unfocusedLabelColor = AuthMuted, unfocusedLabelColor = AuthMuted,
cursorColor = AuthPrimaryDeep, cursorColor = AuthPrimaryDeep,
focusedContainerColor = Color.White.copy(alpha = 0.92f), focusedContainerColor = closerCardColor(alpha = 0.92f),
unfocusedContainerColor = Color.White.copy(alpha = 0.78f), unfocusedContainerColor = Color.White.copy(alpha = 0.78f),
focusedTextColor = AuthInk, focusedTextColor = AuthInk,
unfocusedTextColor = AuthInk, unfocusedTextColor = AuthInk,

View File

@ -1,5 +1,6 @@
package app.closer.ui.components package app.closer.ui.components
import app.closer.ui.theme.closerCardColor
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
@ -28,7 +29,7 @@ fun EmptyState(
Card( Card(
modifier = modifier.fillMaxWidth(), modifier = modifier.fillMaxWidth(),
shape = RoundedCornerShape(28.dp), shape = RoundedCornerShape(28.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.86f)) colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.86f))
) { ) {
Column( Column(
modifier = Modifier.padding(20.dp), modifier = Modifier.padding(20.dp),
@ -38,12 +39,12 @@ fun EmptyState(
text = title, text = title,
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
text = body, text = body,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
if (actionLabel != null && onAction != null) { if (actionLabel != null && onAction != null) {
Button( Button(
@ -52,7 +53,7 @@ fun EmptyState(
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
) )
) { ) {
Text(actionLabel) Text(actionLabel)

View File

@ -42,7 +42,7 @@ fun ErrorState(
Text( Text(
text = message, text = message,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
if (onRetry != null) { if (onRetry != null) {
OutlinedButton( OutlinedButton(

View File

@ -42,7 +42,7 @@ fun LoadingState(
Text( Text(
text = message, text = message,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
} }

View File

@ -1,5 +1,6 @@
package app.closer.ui.components package app.closer.ui.components
import app.closer.ui.theme.closerBackgroundBrush
import androidx.compose.foundation.Canvas import androidx.compose.foundation.Canvas
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
@ -60,15 +61,7 @@ fun PlaceholderScreen(
chips: List<String> = emptyList(), chips: List<String> = emptyList(),
details: List<String> = emptyList() details: List<String> = emptyList()
) { ) {
val background = Brush.linearGradient( val background = closerBackgroundBrush()
colors = listOf(
Color(0xFFFFFBFE),
Color(0xFFF8F1FF),
Color(0xFFFFEEF7)
),
start = Offset.Zero,
end = Offset.Infinite
)
Box( Box(
modifier = modifier modifier = modifier
@ -128,7 +121,7 @@ fun PlaceholderScreen(
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = accent, containerColor = accent,
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
), ),
shape = RoundedCornerShape(16.dp) shape = RoundedCornerShape(16.dp)
) { ) {
@ -196,7 +189,7 @@ private fun PlaceholderHeader(
style = MaterialTheme.typography.displaySmall.copy( style = MaterialTheme.typography.displaySmall.copy(
fontWeight = FontWeight.SemiBold fontWeight = FontWeight.SemiBold
), ),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -204,7 +197,7 @@ private fun PlaceholderHeader(
Text( Text(
text = description, text = description,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 6, maxLines = 6,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -233,7 +226,7 @@ private fun SignalChip(
text = label, text = label,
modifier = Modifier.padding(horizontal = 13.dp, vertical = 8.dp), modifier = Modifier.padding(horizontal = 13.dp, vertical = 8.dp),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -265,7 +258,7 @@ private fun PreviewPanel(
Text( Text(
text = title, text = title,
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -329,7 +322,7 @@ private fun DetailRow(
Text( Text(
text = detail, text = detail,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis

View File

@ -56,7 +56,7 @@ fun SpecialDatesSection(
Text( Text(
text = "Your Special Dates", text = "Your Special Dates",
style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
if (compact) { if (compact) {
DateCountPill() DateCountPill()
@ -87,7 +87,7 @@ fun SpecialDatesSection(
Text( Text(
text = "Your Anniversary", text = "Your Anniversary",
style = MaterialTheme.typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
if (!compact) { if (!compact) {
TodayPill() TodayPill()
@ -96,7 +96,7 @@ fun SpecialDatesSection(
Text( Text(
text = "Added by Jessica", text = "Added by Jessica",
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
@ -113,7 +113,7 @@ fun SpecialDatesSection(
Text( Text(
text = "Next up: Jessica's birthday May 10, Mark's birthday Aug 25", text = "Next up: Jessica's birthday May 10, Mark's birthday Aug 25",
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -138,7 +138,7 @@ private fun BirthdayRow(name: String, day: String, month: String) {
Text( Text(
text = "$name's Birthday", text = "$name's Birthday",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.weight(1f) modifier = Modifier.weight(1f)
) )

View File

@ -1,5 +1,7 @@
package app.closer.ui.dates 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.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.horizontalScroll
@ -89,11 +91,7 @@ private fun BucketListContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
Column( Column(
@ -135,7 +133,7 @@ private fun BucketListContent(
.padding(20.dp) .padding(20.dp)
.align(Alignment.BottomEnd), .align(Alignment.BottomEnd),
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
) { ) {
Text(text = "+", style = MaterialTheme.typography.titleLarge) Text(text = "+", style = MaterialTheme.typography.titleLarge)
} }
@ -180,14 +178,14 @@ private fun Header(
Text( Text(
text = "Our Bucket List", text = "Our Bucket List",
style = MaterialTheme.typography.displaySmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.displaySmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
text = "Dream dates you both want to experience", text = "Dream dates you both want to experience",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -244,7 +242,7 @@ private fun FilterChip(
text = label, text = label,
modifier = Modifier.padding(horizontal = 14.dp, vertical = 8.dp), modifier = Modifier.padding(horizontal = 14.dp, vertical = 8.dp),
style = MaterialTheme.typography.labelMedium, 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 fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium
) )
} }
@ -287,7 +285,7 @@ private fun BucketListItemCard(
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(24.dp), 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), elevation = CardDefaults.cardElevation(defaultElevation = 3.dp),
onClick = { onToggleComplete(item.id) } onClick = { onToggleComplete(item.id) }
) { ) {
@ -324,9 +322,9 @@ private fun BucketListItemCard(
} }
), ),
color = if (item.isCompleted) { color = if (item.isCompleted) {
Color(0xFF5A5060).copy(alpha = 0.6f) MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.6f)
} else { } else {
Color(0xFF261D2E) MaterialTheme.colorScheme.onSurface
}, },
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -345,7 +343,7 @@ private fun BucketListItemCard(
Text( Text(
text = item.description, text = item.description,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -399,13 +397,13 @@ private fun EmptyState(
Text( Text(
text = "No bucket list items yet", text = "No bucket list items yet",
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
text = "Tap the + button to add your first dream date!", text = "Tap the + button to add your first dream date!",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = androidx.compose.ui.text.style.TextAlign.Center textAlign = androidx.compose.ui.text.style.TextAlign.Center
) )
} }
@ -438,7 +436,7 @@ private fun AddItemDialog(
Text( Text(
text = "Add to Bucket List", text = "Add to Bucket List",
style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
OutlinedTextField( OutlinedTextField(
@ -483,7 +481,7 @@ private fun AddItemDialog(
containerColor = Color(0xFFE3D4EB) containerColor = Color(0xFFE3D4EB)
) )
) { ) {
Text("Cancel", color = Color(0xFF5A5060)) Text("Cancel", color = MaterialTheme.colorScheme.onSurfaceVariant)
} }
Button( Button(
@ -492,7 +490,7 @@ private fun AddItemDialog(
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
) )
) { ) {
Text("Add to List") Text("Add to List")
@ -521,7 +519,7 @@ private fun CategoryChip(
text = label, text = label,
modifier = Modifier.padding(horizontal = 12.dp, vertical = 7.dp), modifier = Modifier.padding(horizontal = 12.dp, vertical = 7.dp),
style = MaterialTheme.typography.labelSmall, 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, fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis

View File

@ -1,5 +1,7 @@
package app.closer.ui.dates 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.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@ -83,11 +85,7 @@ private fun DateBuilderContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
Column( Column(
@ -139,14 +137,14 @@ private fun Header(
text = "Plan a Date", text = "Plan a Date",
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
style = MaterialTheme.typography.displaySmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.displaySmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
text = "Tell us what you're looking for", text = "Tell us what you're looking for",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -168,7 +166,7 @@ private fun InputCard(
Surface( Surface(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(24.dp), shape = RoundedCornerShape(24.dp),
color = Color.White.copy(alpha = 0.86f), color = closerCardColor(alpha = 0.86f),
tonalElevation = 0.dp, tonalElevation = 0.dp,
shadowElevation = 2.dp shadowElevation = 2.dp
) { ) {
@ -292,13 +290,13 @@ private fun DateTimeField(
Text( Text(
text = label, text = label,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
fontWeight = FontWeight.Medium fontWeight = FontWeight.Medium
) )
Text( Text(
text = value, text = value,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -321,7 +319,7 @@ private fun BudgetField(
Text( Text(
text = "Budget", text = "Budget",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
fontWeight = FontWeight.Medium fontWeight = FontWeight.Medium
) )
@ -368,7 +366,7 @@ private fun DurationSelector(
Text( Text(
text = "Duration", text = "Duration",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
fontWeight = FontWeight.Medium fontWeight = FontWeight.Medium
) )
@ -412,7 +410,7 @@ private fun DurationChip(
text = label, text = label,
modifier = Modifier.padding(horizontal = 14.dp, vertical = 8.dp), modifier = Modifier.padding(horizontal = 14.dp, vertical = 8.dp),
style = MaterialTheme.typography.labelMedium, 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 fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium
) )
} }
@ -429,7 +427,7 @@ private fun SaveButton(
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
) )
) { ) {
Text("Create Plan") Text("Create Plan")

View File

@ -1,5 +1,6 @@
package app.closer.ui.dates package app.closer.ui.dates
import app.closer.ui.theme.closerBackgroundBrush
import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.spring import androidx.compose.animation.core.spring
import androidx.compose.foundation.background import androidx.compose.foundation.background
@ -95,11 +96,7 @@ private fun DateMatchContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
Column( Column(
@ -214,14 +211,14 @@ private fun DateMatchHeader(
Text( Text(
text = "Date Match", text = "Date Match",
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
text = partnerName?.let { "Swiping with $it" } ?: "Find something you both love", text = partnerName?.let { "Swiping with $it" } ?: "Find something you both love",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -358,7 +355,7 @@ private fun DateCard(
Text( Text(
text = idea.title, text = idea.title,
style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -366,7 +363,7 @@ private fun DateCard(
Text( Text(
text = idea.description, text = idea.description,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 6, maxLines = 6,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -439,7 +436,7 @@ private fun InfoChip(label: String) {
text = label, text = label,
modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp), modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -525,7 +522,7 @@ private fun MatchOverlay(
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background(Color(0xFF261D2E).copy(alpha = 0.54f)) .background(MaterialTheme.colorScheme.onSurface.copy(alpha = 0.54f))
.padding(24.dp), .padding(24.dp),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
@ -556,7 +553,7 @@ private fun MatchOverlay(
Text( Text(
text = "It is a match!", text = "It is a match!",
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
@ -566,7 +563,7 @@ private fun MatchOverlay(
append(" both loved this idea.") append(" both loved this idea.")
}, },
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
match.dateIdea?.let { idea -> match.dateIdea?.let { idea ->
@ -599,7 +596,7 @@ private fun MatchOverlay(
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
) )
) { ) {
Text("View matches") Text("View matches")

View File

@ -1,5 +1,7 @@
package app.closer.ui.dates 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.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -70,11 +72,7 @@ private fun DateMatchesContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
LazyColumn( LazyColumn(
@ -96,13 +94,13 @@ private fun DateMatchesContent(
Text( Text(
text = "Your Matches", text = "Your Matches",
style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
text = state.partnerName?.let { "Ideas you and $it both love" } text = state.partnerName?.let { "Ideas you and $it both love" }
?: "Mutual love matches appear here", ?: "Mutual love matches appear here",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
} }
@ -200,7 +198,7 @@ private fun SectionHeader(
Text( Text(
text = title, text = title,
style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
} }
Surface( Surface(
@ -211,7 +209,7 @@ private fun SectionHeader(
text = count.toString(), text = count.toString(),
modifier = Modifier.padding(horizontal = 11.dp, vertical = 5.dp), modifier = Modifier.padding(horizontal = 11.dp, vertical = 5.dp),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
} }
@ -290,7 +288,7 @@ private fun IdeaCard(
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(24.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 3.dp)
) { ) {
Column( Column(
@ -324,7 +322,7 @@ private fun IdeaCard(
Text( Text(
text = idea.title, text = idea.title,
style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -332,7 +330,7 @@ private fun IdeaCard(
Text( Text(
text = idea.description, text = idea.description,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -364,7 +362,7 @@ private fun InfoChip(
text = label, text = label,
modifier = Modifier.padding(horizontal = 10.dp, vertical = 6.dp), modifier = Modifier.padding(horizontal = 10.dp, vertical = 6.dp),
style = MaterialTheme.typography.labelMedium, 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 fontWeight = if (emphasis) FontWeight.SemiBold else FontWeight.Medium
) )
} }

View File

@ -1,5 +1,6 @@
package app.closer.ui.desiresync package app.closer.ui.desiresync
import app.closer.ui.theme.closerCardColor
import android.util.Log import android.util.Log
import androidx.compose.animation.animateColorAsState import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
@ -332,7 +333,7 @@ private fun DSIntroScreen(playerNumber: Int, total: Int, onReady: () -> Unit) {
else else
"Your turn. Same questions, your side.\nYour answers are private until the reveal.", "Your turn. Same questions, your side.\nYour answers are private until the reveal.",
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Spacer(Modifier.height(8.dp)) Spacer(Modifier.height(8.dp))
@ -372,14 +373,14 @@ private fun DSHandoffScreen(onReady: () -> Unit) {
Text( Text(
text = "Pass the phone!", text = "Pass the phone!",
style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Spacer(Modifier.height(10.dp)) Spacer(Modifier.height(10.dp))
Text( Text(
text = "Partner A is done. Hand the phone to Partner B — keep your answers secret until the reveal.", text = "Partner A is done. Hand the phone to Partner B — keep your answers secret until the reveal.",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Spacer(Modifier.height(36.dp)) Spacer(Modifier.height(36.dp))
@ -444,14 +445,14 @@ private fun DSAnswerScreen(
Card( Card(
modifier = Modifier.fillMaxWidth().weight(1f), modifier = Modifier.fillMaxWidth().weight(1f),
shape = RoundedCornerShape(28.dp), 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) elevation = CardDefaults.cardElevation(8.dp)
) { ) {
Box(modifier = Modifier.fillMaxSize().padding(28.dp), contentAlignment = Alignment.Center) { Box(modifier = Modifier.fillMaxSize().padding(28.dp), contentAlignment = Alignment.Center) {
Text( Text(
text = question.text, text = question.text,
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
maxLines = 5, maxLines = 5,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -529,7 +530,7 @@ private fun DSRevealScreen(
Text( Text(
text = if (matches.isEmpty()) "Nothing in common this round" else "${matches.size} shared desire${if (matches.size != 1) "s" else ""}", 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), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
if (total - matches.size > 0) { if (total - matches.size > 0) {

View File

@ -1,5 +1,7 @@
package app.closer.ui.home 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.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -80,11 +82,7 @@ private fun HomeContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
Column( Column(
@ -158,7 +156,7 @@ private fun HomeHeader(
Text( Text(
text = "For tonight", text = "For tonight",
style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.weight(1f) modifier = Modifier.weight(1f)
) )
if (streakCount > 0) { if (streakCount > 0) {
@ -171,7 +169,7 @@ private fun HomeHeader(
else else
"Open the app, see what matters, and take one small step toward closeness.", "Open the app, see what matters, and take one small step toward closeness.",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -190,7 +188,7 @@ private fun PrimaryHomeActionCard(
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(32.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 18.dp)
) { ) {
Column( Column(
@ -240,7 +238,7 @@ private fun PrimaryHomeActionCard(
Text( Text(
text = action.title, text = action.title,
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -322,7 +320,7 @@ private fun PulseMetric(
Text( Text(
text = label, text = label,
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -398,14 +396,14 @@ private fun SecondaryHomeActionCard(
Text( Text(
text = action.title, text = action.title,
style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
text = action.body, text = action.body,
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -445,12 +443,12 @@ private fun MomentCueCard() {
Text( Text(
text = "Keep important days close without turning them into chores.", text = "Keep important days close without turning them into chores.",
style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
text = "Birthdays, anniversaries, and planned moments will sit here as gentle cues once they are saved.", text = "Birthdays, anniversaries, and planned moments will sit here as gentle cues once they are saved.",
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -560,7 +558,7 @@ private fun CategoryMiniCard(
onClick = onClick, onClick = onClick,
modifier = modifier, modifier = modifier,
shape = RoundedCornerShape(22.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) { ) {
Column( Column(
@ -576,7 +574,7 @@ private fun CategoryMiniCard(
Text( Text(
text = item.category.displayName.ifBlank { item.category.id.displayCategoryName() }, text = item.category.displayName.ifBlank { item.category.id.displayCategoryName() },
style = MaterialTheme.typography.titleSmall, style = MaterialTheme.typography.titleSmall,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -584,7 +582,7 @@ private fun CategoryMiniCard(
Text( Text(
text = "${item.questionCount} prompts", text = "${item.questionCount} prompts",
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -597,7 +595,7 @@ private fun LoadingHomeCard() {
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(26.dp), shape = RoundedCornerShape(26.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.84f)) colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.84f))
) { ) {
Row( Row(
modifier = Modifier.padding(22.dp), modifier = Modifier.padding(22.dp),
@ -608,7 +606,7 @@ private fun LoadingHomeCard() {
Text( Text(
text = "Opening your dashboard", text = "Opening your dashboard",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
} }
@ -622,7 +620,7 @@ private fun ErrorHomeCard(
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(26.dp), shape = RoundedCornerShape(26.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.84f)) colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.84f))
) { ) {
Column( Column(
modifier = Modifier.padding(20.dp), modifier = Modifier.padding(20.dp),
@ -631,20 +629,20 @@ private fun ErrorHomeCard(
Text( Text(
text = "Home paused", text = "Home paused",
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold fontWeight = FontWeight.SemiBold
) )
Text( Text(
text = message, text = message,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
Button( Button(
onClick = onRefresh, onClick = onRefresh,
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
) )
) { ) {
Text("Retry") Text("Retry")
@ -663,7 +661,7 @@ private fun HomePill(label: String) {
text = label, text = label,
modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )

View File

@ -1,5 +1,6 @@
package app.closer.ui.howwell package app.closer.ui.howwell
import app.closer.ui.theme.closerCardColor
import android.util.Log import android.util.Log
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@ -334,7 +335,7 @@ private fun PlayerIntroScreen(playerNumber: Int, total: Int, onReady: () -> Unit
else else
"For each question, guess what your partner answered.\nNo peeking!", "For each question, guess what your partner answered.\nNo peeking!",
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
lineHeight = MaterialTheme.typography.headlineSmall.lineHeight lineHeight = MaterialTheme.typography.headlineSmall.lineHeight
) )
@ -377,14 +378,14 @@ private fun HandoffScreen(onReady: () -> Unit) {
Text( Text(
text = "Pass the phone!", text = "Pass the phone!",
style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Spacer(Modifier.height(10.dp)) Spacer(Modifier.height(10.dp))
Text( Text(
text = "Player 1 is done. Hand the phone to Player 2 — keep your answers secret!", text = "Player 1 is done. Hand the phone to Player 2 — keep your answers secret!",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Spacer(Modifier.height(36.dp)) Spacer(Modifier.height(36.dp))
@ -449,7 +450,7 @@ private fun AnswerScreen(
Card( Card(
modifier = Modifier.fillMaxWidth().weight(1f), modifier = Modifier.fillMaxWidth().weight(1f),
shape = RoundedCornerShape(28.dp), 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) elevation = CardDefaults.cardElevation(8.dp)
) { ) {
Box(modifier = Modifier.fillMaxSize().padding(24.dp), contentAlignment = Alignment.Center) { Box(modifier = Modifier.fillMaxSize().padding(24.dp), contentAlignment = Alignment.Center) {
@ -471,7 +472,7 @@ private fun AnswerScreen(
Text( Text(
text = question.text, text = question.text,
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
maxLines = 5, maxLines = 5,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -596,7 +597,7 @@ private fun RevealScreen(
Text( Text(
text = result.question.text, text = result.question.text,
style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -708,7 +709,7 @@ private fun CompleteScreen(
Text( Text(
text = scoreLabel(score, total), text = scoreLabel(score, total),
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
} }

View File

@ -1,5 +1,7 @@
package app.closer.ui.paywall package app.closer.ui.paywall
import app.closer.ui.theme.closerCardColor
import app.closer.ui.theme.closerBackgroundBrush
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.ContextWrapper import android.content.ContextWrapper
@ -69,12 +71,6 @@ private val BENEFITS = listOf(
"Exportable memories" "Exportable memories"
) )
private val BACKGROUND_GRADIENT = Brush.linearGradient(
colors = listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
@Composable @Composable
fun PaywallScreen( fun PaywallScreen(
onNavigate: (String) -> Unit = {}, onNavigate: (String) -> Unit = {},
@ -94,7 +90,7 @@ fun PaywallScreen(
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background(BACKGROUND_GRADIENT) .background(closerBackgroundBrush())
) { ) {
Column( Column(
modifier = Modifier modifier = Modifier
@ -174,13 +170,13 @@ private fun HeaderSection(
Text( Text(
text = "Go deeper together", text = "Go deeper together",
style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Spacer(modifier = Modifier.height(6.dp)) Spacer(modifier = Modifier.height(6.dp))
Text( Text(
text = "Unlock everything Closer has built for couples.", text = "Unlock everything Closer has built for couples.",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
@ -199,7 +195,7 @@ private fun BenefitsCard(modifier: Modifier = Modifier) {
Card( Card(
modifier = modifier.fillMaxWidth(), modifier = modifier.fillMaxWidth(),
shape = RoundedCornerShape(28.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 10.dp)
) { ) {
Column( Column(
@ -209,7 +205,7 @@ private fun BenefitsCard(modifier: Modifier = Modifier) {
Text( Text(
text = "What's included", text = "What's included",
style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
BENEFITS.forEach { benefit -> BENEFITS.forEach { benefit ->
Row( Row(
@ -225,7 +221,7 @@ private fun BenefitsCard(modifier: Modifier = Modifier) {
Text( Text(
text = benefit, text = benefit,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
} }
} }
@ -253,14 +249,14 @@ private fun PlanOptions(
Text( Text(
text = "Choose your plan", text = "Choose your plan",
style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
if (packages.isEmpty()) { if (packages.isEmpty()) {
Text( Text(
text = "No plans available right now.", text = "No plans available right now.",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} else { } else {
packages.forEach { pkg -> packages.forEach { pkg ->
@ -313,12 +309,12 @@ private fun PlanRow(
Text( Text(
text = pkg.product.title, text = pkg.product.title,
style = MaterialTheme.typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
text = pkg.product.description, text = pkg.product.description,
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
@ -349,9 +345,9 @@ private fun ActionButtons(
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236), contentColor = MaterialTheme.colorScheme.onPrimary,
disabledContainerColor = Color(0xFFB98AF4).copy(alpha = 0.40f), 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) Text("Continue", fontWeight = FontWeight.SemiBold)
@ -402,12 +398,12 @@ private fun ThankYouOverlay(onDismiss: () -> Unit) {
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background(Color(0xFF261D2E).copy(alpha = 0.54f)), .background(MaterialTheme.colorScheme.onSurface.copy(alpha = 0.54f)),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Card( Card(
shape = RoundedCornerShape(28.dp), shape = RoundedCornerShape(28.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.96f)) colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.96f))
) { ) {
Column( Column(
modifier = Modifier.padding(28.dp), modifier = Modifier.padding(28.dp),
@ -423,12 +419,12 @@ private fun ThankYouOverlay(onDismiss: () -> Unit) {
Text( Text(
text = "You're all set", text = "You're all set",
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
text = "Thank you for supporting Closer.", text = "Thank you for supporting Closer.",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Button( Button(
@ -436,7 +432,7 @@ private fun ThankYouOverlay(onDismiss: () -> Unit) {
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
) )
) { ) {
Text("Continue") Text("Continue")

View File

@ -1,5 +1,6 @@
package app.closer.ui.questions package app.closer.ui.questions
import app.closer.ui.theme.closerBackgroundBrush
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -66,11 +67,7 @@ fun LocalQuestionContent(
onRefresh: (() -> Unit)? = null, onRefresh: (() -> Unit)? = null,
modifier: Modifier = Modifier modifier: Modifier = Modifier
) { ) {
val background = Brush.linearGradient( val background = closerBackgroundBrush()
colors = listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
Box( Box(
modifier = modifier modifier = modifier
@ -185,12 +182,12 @@ private fun LocalQuestionHeader(
Text( Text(
text = title, text = title,
style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
text = subtitle, text = subtitle,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -221,7 +218,7 @@ private fun MetaPill(label: String) {
text = label, text = label,
modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp), modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -262,13 +259,13 @@ private fun SubmittedAnswerCard(
Text( Text(
text = "Private answer saved", text = "Private answer saved",
style = MaterialTheme.typography.titleSmall, style = MaterialTheme.typography.titleSmall,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold fontWeight = FontWeight.SemiBold
) )
Text( Text(
text = answerSummary(question, state), text = answerSummary(question, state),
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )

View File

@ -1,5 +1,7 @@
package app.closer.ui.questions 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.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.horizontalScroll
@ -85,11 +87,7 @@ private fun QuestionCategoryContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
LazyColumn( LazyColumn(
@ -189,7 +187,7 @@ private fun CategoryHero(
Text( Text(
text = title, text = title,
style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -197,7 +195,7 @@ private fun CategoryHero(
text = category?.description text = category?.description
?: "Browse prompts for this kind of conversation.", ?: "Browse prompts for this kind of conversation.",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -232,7 +230,7 @@ private fun CategoryFilters(
Text( Text(
text = "Format", text = "Format",
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
fontWeight = FontWeight.SemiBold fontWeight = FontWeight.SemiBold
) )
Row( Row(
@ -280,7 +278,7 @@ private fun FilterPill(
text = label, text = label,
modifier = Modifier.padding(horizontal = 13.dp, vertical = 8.dp), modifier = Modifier.padding(horizontal = 13.dp, vertical = 8.dp),
style = MaterialTheme.typography.labelMedium, 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, fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -300,7 +298,7 @@ private fun DepthHeader(depth: Int, count: Int) {
Text( Text(
text = "Depth $depth", text = "Depth $depth",
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold fontWeight = FontWeight.SemiBold
) )
CategoryPill("$count ${if (count == 1) "prompt" else "prompts"}") CategoryPill("$count ${if (count == 1) "prompt" else "prompts"}")
@ -316,7 +314,7 @@ private fun QuestionListCard(
onClick = onClick, onClick = onClick,
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(20.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 3.dp)
) { ) {
Column( Column(
@ -327,7 +325,7 @@ private fun QuestionListCard(
text = question.text, text = question.text,
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -357,7 +355,7 @@ private fun CategoryPill(
text = label, text = label,
modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = if (emphasis) Color(0xFF56306F) else Color(0xFF261D2E), color = if (emphasis) Color(0xFF56306F) else MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -369,7 +367,7 @@ private fun CategoryLoadingCard() {
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(24.dp), shape = RoundedCornerShape(24.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.82f)) colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.82f))
) { ) {
Row( Row(
modifier = Modifier.padding(22.dp), modifier = Modifier.padding(22.dp),
@ -380,7 +378,7 @@ private fun CategoryLoadingCard() {
Text( Text(
text = "Loading prompts", text = "Loading prompts",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -393,7 +391,7 @@ private fun CategoryMessageCard(title: String, message: String) {
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(24.dp), shape = RoundedCornerShape(24.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.82f)) colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.82f))
) { ) {
Column( Column(
modifier = Modifier.padding(22.dp), modifier = Modifier.padding(22.dp),
@ -403,14 +401,14 @@ private fun CategoryMessageCard(title: String, message: String) {
text = title, text = title,
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
text = message, text = message,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 4, maxLines = 4,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )

View File

@ -1,5 +1,7 @@
package app.closer.ui.questions 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.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.horizontalScroll
@ -90,11 +92,7 @@ private fun QuestionPackLibraryContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
LazyColumn( LazyColumn(
@ -113,14 +111,14 @@ private fun QuestionPackLibraryContent(
Text( Text(
text = "Pick a doorway", text = "Pick a doorway",
style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
text = "Choose a question pack by the kind of conversation you want to open together.", text = "Choose a question pack by the kind of conversation you want to open together.",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -180,7 +178,7 @@ private fun QuestionPackLibraryContent(
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
) )
) { ) {
Text("Unlock all packs") Text("Unlock all packs")
@ -200,7 +198,7 @@ private fun QuestionPackCard(
val containerColor = if (item.isLocked) val containerColor = if (item.isLocked)
Color(0xFFFFF8FC).copy(alpha = 0.9f) Color(0xFFFFF8FC).copy(alpha = 0.9f)
else else
Color.White.copy(alpha = 0.9f) closerCardColor(alpha = 0.9f)
val accent = packAccent(item.category.id) val accent = packAccent(item.category.id)
Card( Card(
@ -242,7 +240,7 @@ private fun QuestionPackCard(
Text( Text(
text = item.category.displayName.ifBlank { item.category.id.displayCategoryName() }, text = item.category.displayName.ifBlank { item.category.id.displayCategoryName() },
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -250,7 +248,7 @@ private fun QuestionPackCard(
Text( Text(
text = item.category.description, text = item.category.description,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -312,7 +310,7 @@ private fun FilterPill(
text = label, text = label,
modifier = Modifier.padding(horizontal = 13.dp, vertical = 8.dp), modifier = Modifier.padding(horizontal = 13.dp, vertical = 8.dp),
style = MaterialTheme.typography.labelMedium, 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, fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Medium,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -334,7 +332,7 @@ private fun PackPill(
text = label, text = label,
modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp), modifier = Modifier.padding(horizontal = 11.dp, vertical = 7.dp),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = if (emphasis) Color(0xFF56306F) else Color(0xFF261D2E), color = if (emphasis) Color(0xFF56306F) else MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -373,7 +371,7 @@ private fun LoadingPackCard() {
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(26.dp), shape = RoundedCornerShape(26.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.82f)) colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.82f))
) { ) {
Row( Row(
modifier = Modifier.padding(22.dp), modifier = Modifier.padding(22.dp),
@ -384,7 +382,7 @@ private fun LoadingPackCard() {
Text( Text(
text = "Loading question packs", text = "Loading question packs",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -397,7 +395,7 @@ private fun PackMessageCard(title: String, message: String) {
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(26.dp), shape = RoundedCornerShape(26.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.82f)) colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.82f))
) { ) {
Column( Column(
modifier = Modifier.padding(22.dp), modifier = Modifier.padding(22.dp),
@ -407,14 +405,14 @@ private fun PackMessageCard(title: String, message: String) {
text = title, text = title,
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
text = message, text = message,
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 4, maxLines = 4,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )

View File

@ -14,7 +14,7 @@ import app.closer.ui.theme.PrimaryColor
internal val SettingsBackgroundBrush: Brush internal val SettingsBackgroundBrush: Brush
get() = Brush.linearGradient( get() = Brush.linearGradient(
colors = listOf(BackgroundColor, CloserPalette.PurpleSoft, CloserPalette.PinkMist), colors = listOf(BackgroundColor, CloserPalette.BackgroundWash, CloserPalette.PinkMist),
start = Offset.Zero, start = Offset.Zero,
end = Offset.Infinite end = Offset.Infinite
) )

View File

@ -7,6 +7,7 @@ import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
object CloserPalette { object CloserPalette {
val BackgroundWash = Color(0xFFF8F1FF)
val PurpleDeep = Color(0xFF56306F) val PurpleDeep = Color(0xFF56306F)
val PurpleRich = Color(0xFF8F67C5) val PurpleRich = Color(0xFF8F67C5)
val PurpleSoft = Color(0xFFF4E8FF) val PurpleSoft = Color(0xFFF4E8FF)
@ -29,13 +30,39 @@ fun closerBackgroundBrush(): Brush =
Brush.linearGradient( Brush.linearGradient(
colors = listOf( colors = listOf(
MaterialTheme.colorScheme.background, MaterialTheme.colorScheme.background,
CloserPalette.PurpleSoft, CloserPalette.BackgroundWash,
CloserPalette.PinkMist CloserPalette.PinkMist
), ),
start = Offset.Zero, start = Offset.Zero,
end = Offset.Infinite 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 @Composable
fun closerPlayCardBrush(): Brush = fun closerPlayCardBrush(): Brush =
Brush.linearGradient( Brush.linearGradient(

View File

@ -1,5 +1,6 @@
package app.closer.ui.thisorthat package app.closer.ui.thisorthat
import app.closer.ui.theme.closerCardColor
import android.util.Log import android.util.Log
import androidx.compose.animation.animateColorAsState import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.RepeatMode import androidx.compose.animation.core.RepeatMode
@ -250,7 +251,7 @@ private fun ThisOrThatContent(
.fillMaxWidth() .fillMaxWidth()
.weight(1f), .weight(1f),
shape = RoundedCornerShape(28.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 8.dp)
) { ) {
Box( Box(
@ -281,7 +282,7 @@ private fun ThisOrThatContent(
Text( Text(
text = question.text, text = question.text,
style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
maxLines = 5, maxLines = 5,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -520,13 +521,13 @@ private fun ThisOrThatComplete(
Text( Text(
text = "All done!", text = "All done!",
style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Text( Text(
text = "You went through $total prompts.", text = "You went through $total prompts.",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
} }
@ -535,7 +536,7 @@ private fun ThisOrThatComplete(
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(24.dp), 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) elevation = CardDefaults.cardElevation(6.dp)
) { ) {
Row( Row(
@ -630,7 +631,7 @@ private fun TallyItem(label: String, count: Int, color: Color) {
Text( Text(
text = "picked $label", text = "picked $label",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
} }

View File

@ -1,5 +1,6 @@
package app.closer.ui.wheel package app.closer.ui.wheel
import app.closer.ui.theme.closerCardColor
import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.RepeatMode import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.animateFloat
@ -241,6 +242,7 @@ private fun WheelSpinner(
animationSpec = tween(durationMillis = 160), animationSpec = tween(durationMillis = 160),
label = "wheel_pointer_scale" label = "wheel_pointer_scale"
) )
val wheelRingColor = closerCardColor(alpha = 0.84f)
Box( Box(
modifier = Modifier modifier = Modifier
@ -267,7 +269,7 @@ private fun WheelSpinner(
radius = size.minDimension * 0.24f radius = size.minDimension * 0.24f
) )
drawCircle( drawCircle(
color = Color.White.copy(alpha = 0.84f), color = wheelRingColor,
style = Stroke(width = 7.dp.toPx()) style = Stroke(width = 7.dp.toPx())
) )
} }

View File

@ -1,5 +1,7 @@
package app.closer.ui.wheel package app.closer.ui.wheel
import app.closer.ui.theme.closerCardColor
import app.closer.ui.theme.closerBackgroundBrush
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import app.closer.core.navigation.AppRoute import app.closer.core.navigation.AppRoute
@ -106,11 +108,7 @@ private fun WheelCompleteContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
), ),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
@ -138,7 +136,7 @@ private fun WheelCompleteContent(
Text( Text(
text = "Session complete", text = "Session complete",
style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -147,7 +145,7 @@ private fun WheelCompleteContent(
Text( Text(
text = categoryName, text = categoryName,
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -159,7 +157,7 @@ private fun WheelCompleteContent(
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(24.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 6.dp)
) { ) {
Column( Column(
@ -175,7 +173,7 @@ private fun WheelCompleteContent(
Text( Text(
text = "of $total questions", text = "of $total questions",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )

View File

@ -1,5 +1,7 @@
package app.closer.ui.wheel 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.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -76,11 +78,7 @@ fun WheelHistoryScreen(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
LazyColumn( LazyColumn(
@ -96,7 +94,7 @@ fun WheelHistoryScreen(
Text( Text(
text = "Spin sessions", text = "Spin sessions",
style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.headlineMedium.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.padding(top = 20.dp, bottom = 4.dp) modifier = Modifier.padding(top = 20.dp, bottom = 4.dp)
) )
} }
@ -134,7 +132,7 @@ private fun WheelSessionCard(session: QuestionSession) {
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(20.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) { ) {
Row( Row(
@ -147,12 +145,12 @@ private fun WheelSessionCard(session: QuestionSession) {
text = session.categoryId.displayCategoryName(), text = session.categoryId.displayCategoryName(),
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
color = Color(0xFF261D2E) color = MaterialTheme.colorScheme.onSurface
) )
Text( Text(
text = "${session.questionIds.size} questions", text = "${session.questionIds.size} questions",
style = MaterialTheme.typography.bodySmall, style = MaterialTheme.typography.bodySmall,
color = Color(0xFF5A5060) color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
session.completedAt?.let { ts -> session.completedAt?.let { ts ->
@ -171,7 +169,7 @@ private fun WheelHistoryLockedCard(onUnlock: () -> Unit) {
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(24.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 6.dp)
) { ) {
Column( Column(
@ -194,14 +192,14 @@ private fun WheelHistoryLockedCard(onUnlock: () -> Unit) {
text = "History is a premium feature", text = "History is a premium feature",
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 2, maxLines = 2,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
text = "Unlock to browse all your past spin wheel sessions together.", text = "Unlock to browse all your past spin wheel sessions together.",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@ -213,10 +211,10 @@ private fun WheelHistoryLockedCard(onUnlock: () -> Unit) {
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFFB98AF4), containerColor = Color(0xFFB98AF4),
contentColor = Color(0xFF271236) contentColor = MaterialTheme.colorScheme.onPrimary
) )
) { ) {
Text("Unlock premium", color = Color(0xFF271236)) Text("Unlock premium", color = MaterialTheme.colorScheme.onPrimary)
} }
} }
} }

View File

@ -1,5 +1,7 @@
package app.closer.ui.wheel 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.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -73,11 +75,7 @@ private fun WheelSessionContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background( .background(
Brush.linearGradient( closerBackgroundBrush()
listOf(Color(0xFFFFFBFE), Color(0xFFF8F1FF), Color(0xFFFFEEF7)),
start = Offset.Zero,
end = Offset.Infinite
)
) )
) { ) {
Column( Column(
@ -141,7 +139,7 @@ private fun WheelSessionContent(
.fillMaxWidth() .fillMaxWidth()
.weight(1f), .weight(1f),
shape = RoundedCornerShape(28.dp), 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) elevation = CardDefaults.cardElevation(defaultElevation = 10.dp)
) { ) {
Box( Box(
@ -153,7 +151,7 @@ private fun WheelSessionContent(
Text( Text(
text = question?.text ?: "", text = question?.text ?: "",
style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold), style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold),
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
lineHeight = MaterialTheme.typography.titleLarge.lineHeight, lineHeight = MaterialTheme.typography.titleLarge.lineHeight,
maxLines = 8, maxLines = 8,
@ -211,7 +209,7 @@ private fun EmptySessionCard() {
Card( Card(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(24.dp), shape = RoundedCornerShape(24.dp),
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.84f)) colors = CardDefaults.cardColors(containerColor = closerCardColor(alpha = 0.84f))
) { ) {
Column( Column(
modifier = Modifier.padding(24.dp), modifier = Modifier.padding(24.dp),
@ -221,14 +219,14 @@ private fun EmptySessionCard() {
"No active session", "No active session",
style = MaterialTheme.typography.titleMedium, style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.SemiBold,
color = Color(0xFF261D2E), color = MaterialTheme.colorScheme.onSurface,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
Text( Text(
"Go back to the category picker and spin the wheel to start.", "Go back to the category picker and spin the wheel to start.",
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF5A5060), color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 3, maxLines = 3,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )