Desktop: warm-graphite theme (dark charcoal + gold accent)

Was running on bare MaterialTheme defaults (stock lavender). New
desktop-only Theme.kt: darkColorScheme tuned to the Skills Hub hero
palette — #1A1A1A graphite bg, lifted card surfaces, gold primary
(E0B23A, text-safe contrast on cards), olive pill fills, warm-tuned
error red, cool slate tertiary. GoldInk for text on gold fills.
Status semantics: done=gold primary, failed=error, queued=variant.

Verified by screenshot on the running app (library + settings):
cohesive dark-gold, links legible, no contrast failures.
This commit is contained in:
avi 2026-09-13 02:58:20 -05:00
commit 9618067fc4
2 changed files with 70 additions and 2 deletions

View file

@ -3,7 +3,6 @@ package com.shonar.desktop
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@ -22,7 +21,7 @@ fun main() = application {
title = "SHONAR Desktop", title = "SHONAR Desktop",
state = rememberWindowState(width = 1100.dp, height = 800.dp), state = rememberWindowState(width = 1100.dp, height = 800.dp),
) { ) {
MaterialTheme { ShonarTheme {
Surface(Modifier.fillMaxSize()) { Surface(Modifier.fillMaxSize()) {
Box(Modifier.fillMaxSize().padding(20.dp)) { Box(Modifier.fillMaxSize().padding(20.dp)) {
when (screen) { when (screen) {

View file

@ -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)
}