diff --git a/desktop/app/src/main/kotlin/com/shonar/desktop/Main.kt b/desktop/app/src/main/kotlin/com/shonar/desktop/Main.kt index 8804685..e4be34d 100644 --- a/desktop/app/src/main/kotlin/com/shonar/desktop/Main.kt +++ b/desktop/app/src/main/kotlin/com/shonar/desktop/Main.kt @@ -3,7 +3,6 @@ package com.shonar.desktop import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -22,7 +21,7 @@ fun main() = application { title = "SHONAR Desktop", state = rememberWindowState(width = 1100.dp, height = 800.dp), ) { - MaterialTheme { + ShonarTheme { Surface(Modifier.fillMaxSize()) { Box(Modifier.fillMaxSize().padding(20.dp)) { when (screen) { diff --git a/desktop/app/src/main/kotlin/com/shonar/desktop/Theme.kt b/desktop/app/src/main/kotlin/com/shonar/desktop/Theme.kt new file mode 100644 index 0000000..5c200a4 --- /dev/null +++ b/desktop/app/src/main/kotlin/com/shonar/desktop/Theme.kt @@ -0,0 +1,69 @@ +package com.shonar.desktop + +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color + +/** + * SHONAR Desktop theme — "warm graphite": near-black charcoal surfaces + * with an olive-gold accent, inspired by the Skills Hub hero design. + * Desktop-only for now (Android keeps its own ui/theme/Theme.kt). + * + * Status semantics in the library list map to scheme roles: + * done -> primary (gold), failed -> error (red), queued/running -> + * onSurfaceVariant with a primary progress bar. + */ +private val ShonarGold = Color(0xFFE0B23A) // text-safe gold (brighter for AA on cards) +private val ShonarGoldBright = Color(0xFFF0C419) +private val GoldInk = Color(0xFF1F1800) // text on gold fills (AA) +private val GraphiteBg = Color(0xFF1A1A1A) +private val GraphiteSurface = Color(0xFF222222) +private val GraphiteHigh = Color(0xFF2B2B2B) +private val InkPrimary = Color(0xFFF4F4F4) +private val InkSecondary = Color(0xFFB3B3B3) +private val InkMuted = Color(0xFF8A8A8A) +private val OutlineWarm = Color(0xFF3A3A3A) +private val DangerWarm = Color(0xFFE5544F) + +private val ShonarDarkScheme = darkColorScheme( + primary = ShonarGold, + onPrimary = GoldInk, + primaryContainer = Color(0xFF3A3216), + onPrimaryContainer = ShonarGoldBright, + + secondary = Color(0xFFB99B5E), + onSecondary = GoldInk, + secondaryContainer = Color(0xFF332C1A), + onSecondaryContainer = Color(0xFFE8D9AE), + + tertiary = Color(0xFF8FA6B2), // cool counterpoint (info-ish) + onTertiary = Color(0xFF0E1A20), + tertiaryContainer = Color(0xFF2A3B45), + onTertiaryContainer = Color(0xFFCDE2EC), + + background = GraphiteBg, + onBackground = InkPrimary, + + surface = GraphiteSurface, + onSurface = InkPrimary, + surfaceVariant = Color(0xFF2E2A21), + onSurfaceVariant = InkSecondary, + surfaceContainer = GraphiteHigh, // cards lift off the bg + surfaceContainerHigh = Color(0xFF333333), + surfaceContainerHighest = Color(0xFF3A3A3A), + + outline = OutlineWarm, + outlineVariant = Color(0xFF2E2E2E), + + error = DangerWarm, + onError = Color(0xFF2B0A08), + errorContainer = Color(0xFF47201E), + onErrorContainer = Color(0xFFFFB4AF), +) + +/** Wrap the app content in the SHONAR dark-gold theme. */ +@Composable +fun ShonarTheme(content: @Composable () -> Unit) { + MaterialTheme(colorScheme = ShonarDarkScheme, content = content) +}