diff --git a/app/src/main/kotlin/com/example/myapplication/screens/HomeScreen.kt b/app/src/main/kotlin/com/example/myapplication/screens/HomeScreen.kt index f0d31ec..5ad02cb 100644 --- a/app/src/main/kotlin/com/example/myapplication/screens/HomeScreen.kt +++ b/app/src/main/kotlin/com/example/myapplication/screens/HomeScreen.kt @@ -305,11 +305,16 @@ private fun FeaturedItemBanner( Box(Modifier.fillMaxSize().background( Brush.verticalGradient( 0f to Color.Transparent, - 0.38f to Color.Transparent, - 0.56f to immersive.hero.copy(alpha = 0.10f), - 0.72f to immersive.hero.copy(alpha = 0.34f), - 0.88f to immersive.pageTop.copy(alpha = 0.76f), - 1f to immersive.pageTop, + 0.30f to Color.Transparent, + 0.45f to immersive.hero.copy(alpha = 0.06f), + 0.55f to immersive.hero.copy(alpha = 0.14f), + 0.63f to immersive.hero.copy(alpha = 0.24f), + 0.70f to immersive.hero.copy(alpha = 0.36f), + 0.77f to immersive.hero.copy(alpha = 0.50f), + 0.83f to immersive.hero.copy(alpha = 0.66f), + 0.89f to immersive.hero.copy(alpha = 0.80f), + 0.94f to immersive.hero.copy(alpha = 0.92f), + 1f to immersive.hero, ) )) @@ -880,8 +885,8 @@ fun HomeScreen( } val homeBackground = if (useImmersiveHomeBackground) { Brush.verticalGradient( - 0f to immersiveBackground.pageTop, - 0.54f to immersiveBackground.pageTop, + 0f to immersiveBackground.hero, + 0.50f to immersiveBackground.hero, 1f to immersiveBackground.pageBottom, ) } else { diff --git a/app/src/main/kotlin/com/example/myapplication/screens/MediaDetailScreen.kt b/app/src/main/kotlin/com/example/myapplication/screens/MediaDetailScreen.kt index beca8be..9e8fc1a 100644 --- a/app/src/main/kotlin/com/example/myapplication/screens/MediaDetailScreen.kt +++ b/app/src/main/kotlin/com/example/myapplication/screens/MediaDetailScreen.kt @@ -47,6 +47,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawWithContent import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.BlendMode import androidx.compose.ui.geometry.CornerRadius import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size @@ -468,8 +469,8 @@ fun MediaDetailScreen( .fillMaxSize() .background( Brush.verticalGradient( - 0f to immersive.pageTop, - 0.53f to immersive.hero, + 0f to immersive.hero, + 0.50f to immersive.hero, 1f to immersive.pageBottom, ) ) @@ -818,7 +819,7 @@ private fun DetailHero( val posterUrl = EmbyRepository.buildImageUrl(serverUrl, item, maxWidth = 900) // Keep the detail cover at the same height as the home hero. - Box(Modifier.fillMaxWidth().aspectRatio(0.84f)) { + Box(Modifier.fillMaxWidth().aspectRatio(1.0f)) { if (backdropUrl != null || posterUrl != null) { LumaAsyncImage( model = backdropUrl ?: posterUrl, @@ -859,21 +860,21 @@ private fun DetailHero( ), ) - // Long bottom ramp into the same palette-derived background. Most of the - // artwork stays visible; the transition happens mainly in the lower third. + // Bottom ramp: gentle transition into the palette background. + // Starts late so most of the artwork stays clear. Box( Modifier .fillMaxSize() .background( Brush.verticalGradient( 0f to Color.Transparent, - 0.34f to background.copy(alpha = 0.03f), - 0.50f to background.copy(alpha = 0.10f), - 0.63f to background.copy(alpha = 0.23f), - 0.73f to background.copy(alpha = 0.41f), - 0.82f to background.copy(alpha = 0.60f), - 0.90f to background.copy(alpha = 0.78f), - 0.96f to background.copy(alpha = 0.92f), + 0.48f to Color.Transparent, + 0.60f to background.copy(alpha = 0.08f), + 0.70f to background.copy(alpha = 0.20f), + 0.78f to background.copy(alpha = 0.40f), + 0.85f to background.copy(alpha = 0.62f), + 0.91f to background.copy(alpha = 0.80f), + 0.96f to background.copy(alpha = 0.93f), 1f to background, ) ), @@ -897,16 +898,16 @@ private fun DetailHeadline(detail: EmbyItem, serverUrl: String) { horizontalAlignment = Alignment.CenterHorizontally, ) { Box( - Modifier.fillMaxWidth().heightIn(min = 58.dp, max = 96.dp), + Modifier.fillMaxWidth().heightIn(min = 78.dp, max = 136.dp), contentAlignment = Alignment.Center, ) { if (!logoLoaded) { Text( text = displayTitle, color = LocalDetailText.current, - fontSize = 23.sp, + fontSize = 34.sp, fontWeight = FontWeight.Bold, - lineHeight = 28.sp, + lineHeight = 42.sp, textAlign = TextAlign.Center, maxLines = 3, overflow = TextOverflow.Ellipsis, @@ -917,7 +918,7 @@ private fun DetailHeadline(detail: EmbyItem, serverUrl: String) { model = logoUrl, contentDescription = displayTitle, contentScale = ContentScale.Fit, - modifier = Modifier.fillMaxWidth(0.76f).heightIn(max = 96.dp), + modifier = Modifier.fillMaxWidth(0.88f).heightIn(max = 136.dp), onSuccess = { logoLoaded = true }, onError = { logoLoaded = false }, ) @@ -1377,13 +1378,13 @@ private fun CastSection(cast: List, loading: Boolean) { private fun CastMemberCard(member: DetailCastMember) { Column( modifier = Modifier - .width(92.dp) - .height(128.dp), + .width(84.dp) + .height(118.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { Box( Modifier - .size(88.dp) + .size(80.dp) .clip(CircleShape) .background( Brush.linearGradient( @@ -1416,7 +1417,7 @@ private fun CastMemberCard(member: DetailCastMember) { Text( text = member.name, color = LocalDetailText.current, - fontSize = 12.sp, + fontSize = 11.sp, fontWeight = FontWeight.SemiBold, maxLines = 1, textAlign = TextAlign.Center,