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