App Kotlin Multiplatform (Android/iOS/Desktop) con Compose Multiplatform: controllo intonazione (YIN), pratica guidata, metronomo, ear training, sfide, scansione spartiti via AI, spartiti bundled e pentagramma con glifi tipografici, travature, battute e spaziatura proporzionale. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
108 lines
4.2 KiB
Kotlin
108 lines
4.2 KiB
Kotlin
package com.notemusicali.ui.theme
|
|
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.darkColorScheme
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.graphics.Brush
|
|
import androidx.compose.ui.graphics.Color
|
|
|
|
// Remotion video-inspired palette
|
|
object AppColors {
|
|
val bgDark = Color(0xFF0A0118)
|
|
val bgPurple = Color(0xFF1A0533)
|
|
val bgIndigo = Color(0xFF2D1B69)
|
|
val accent = Color(0xFFFFD700) // Gold
|
|
val accentWarm = Color(0xFFFFA500) // Orange-gold
|
|
val accentRose = Color(0xFFFF6B9D) // Rose
|
|
val text = Color.White
|
|
val textMuted = Color.White.copy(alpha = 0.6f)
|
|
val cardBg = Color.White.copy(alpha = 0.06f)
|
|
val cardBorder = Color.White.copy(alpha = 0.12f)
|
|
val noteGlow = Color(0x66FFD700) // Gold glow
|
|
}
|
|
|
|
private val DarkColorScheme = darkColorScheme(
|
|
primary = AppColors.accent,
|
|
secondary = AppColors.accentRose,
|
|
tertiary = Color(0xFF4ECDC4),
|
|
background = AppColors.bgDark,
|
|
surface = AppColors.bgPurple,
|
|
onPrimary = Color.Black,
|
|
onSecondary = Color.Black,
|
|
onTertiary = Color.Black,
|
|
onBackground = Color.White,
|
|
onSurface = Color.White,
|
|
surfaceVariant = AppColors.bgIndigo,
|
|
)
|
|
|
|
object CardGradients {
|
|
// Home cards — glass-like with subtle colored tints on dark purple base
|
|
val tuner = Brush.linearGradient(listOf(Color(0xFF1A1040), Color(0xFF2D1B69)))
|
|
val practice = Brush.linearGradient(listOf(Color(0xFF0D1F2D), Color(0xFF1A0533)))
|
|
val exercises = Brush.linearGradient(listOf(Color(0xFF2A1020), Color(0xFF1A0533)))
|
|
val history = Brush.linearGradient(listOf(Color(0xFF1A0533), Color(0xFF0A0118)))
|
|
val scores = Brush.linearGradient(listOf(Color(0xFF0D1A2D), Color(0xFF1A0533)))
|
|
val scoreFile = Brush.linearGradient(listOf(Color(0xFF151025), Color(0xFF0A0118)))
|
|
|
|
val metronome = Brush.linearGradient(listOf(Color(0xFF1E1035), Color(0xFF0A0118)))
|
|
val reference = Brush.linearGradient(listOf(Color(0xFF0D1F33), Color(0xFF1A0533)))
|
|
val scales = Brush.linearGradient(listOf(Color(0xFF101E15), Color(0xFF1A0533)))
|
|
val earTraining = Brush.linearGradient(listOf(Color(0xFF2D1050), Color(0xFF1A0533)))
|
|
val challenge = Brush.linearGradient(listOf(Color(0xFF2A0D1A), Color(0xFF1A0533)))
|
|
val stats = Brush.linearGradient(listOf(Color(0xFF0D1533), Color(0xFF1A0533)))
|
|
val goals = Brush.linearGradient(listOf(Color(0xFF2A1A05), Color(0xFF1A0533)))
|
|
val leaderboard = Brush.linearGradient(listOf(Color(0xFF151040), Color(0xFF1A0533)))
|
|
val guide = Brush.linearGradient(listOf(Color(0xFF151525), Color(0xFF0A0118)))
|
|
|
|
// Practice setup
|
|
val setup = Brush.linearGradient(listOf(Color(0xFF0D1F2D), Color(0xFF1A0533)))
|
|
|
|
// Exercise levels — subtle colored tints
|
|
val level1 = Brush.linearGradient(listOf(Color(0xFF0D2015), Color(0xFF1A0533)))
|
|
val level2 = Brush.linearGradient(listOf(Color(0xFF0D1533), Color(0xFF1A0533)))
|
|
val level3 = Brush.linearGradient(listOf(Color(0xFF2A1A05), Color(0xFF1A0533)))
|
|
val level4 = Brush.linearGradient(listOf(Color(0xFF2A0D15), Color(0xFF1A0533)))
|
|
|
|
fun forLevel(level: Int): Brush = when (level) {
|
|
1 -> level1
|
|
2 -> level2
|
|
3 -> level3
|
|
else -> level4
|
|
}
|
|
}
|
|
|
|
// Accent colors for each card category (used for top accent lines and icon tints)
|
|
object CardAccents {
|
|
val tuner = Color(0xFF4ECDC4)
|
|
val metronome = Color(0xFFFFD700)
|
|
val reference = Color(0xFF90CAF9)
|
|
val practice = Color(0xFF4CAF50)
|
|
val exercises = Color(0xFFFF6B9D)
|
|
val scales = Color(0xFF66BB6A)
|
|
val scores = Color(0xFF4DD0E1)
|
|
val earTraining = Color(0xFFCE93D8)
|
|
val challenge = Color(0xFFEF5350)
|
|
val leaderboard = Color(0xFF7986CB)
|
|
val stats = Color(0xFF42A5F5)
|
|
val goals = Color(0xFFFFA726)
|
|
val history = Color(0xFFAB47BC)
|
|
val guide = Color(0xFF78909C)
|
|
}
|
|
|
|
object TunerColors {
|
|
val inTune = Color(0xFF4CAF50)
|
|
val outOfTune = Color(0xFFF44336)
|
|
val silence = Color(0xFF424242)
|
|
val inTuneBackground = Color(0xFF0D200D)
|
|
val outOfTuneBackground = Color(0xFF2A0D0D)
|
|
val silenceBackground = AppColors.bgDark
|
|
}
|
|
|
|
@Composable
|
|
fun NoteMusicaliTheme(content: @Composable () -> Unit) {
|
|
MaterialTheme(
|
|
colorScheme = DarkColorScheme,
|
|
content = content,
|
|
)
|
|
}
|