diff --git a/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt b/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt index 69eaa47..afd8b5b 100644 --- a/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt +++ b/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt @@ -160,7 +160,7 @@ class DesktopState(private val appDir: File = defaultAppDir()) { scope.launch { prefs.putString(KEY_THEME, when (mode) { ThemeMode.LIGHT -> "light" - ThemeMode.MERIDIAN -> "meridian" + ThemeMode.DARK -> "dark" ThemeMode.DEFAULT -> "default" }) } @@ -196,10 +196,10 @@ class DesktopState(private val appDir: File = defaultAppDir()) { ?.let { _sortOrder.value = it } _summarizer.value = prefs.getString(KEY_SUMMARIZER) ?: "auto" _themeMode.value = when (prefs.getString(KEY_THEME)) { - // legacy "dark" (meridian-era default) now means Sonar; - // pick Meridian explicitly to get the old look back + // legacy values: "dark" was always the charcoal palette; + // "meridian" is that palette renamed; "sonar" became Default "light" -> ThemeMode.LIGHT - "meridian" -> ThemeMode.MERIDIAN + "meridian", "dark" -> ThemeMode.DARK else -> ThemeMode.DEFAULT } loadNotifyState() diff --git a/app/src/main/kotlin/com/shonar/desktop/Screens.kt b/app/src/main/kotlin/com/shonar/desktop/Screens.kt index 5a3ce59..e0c5c4b 100644 --- a/app/src/main/kotlin/com/shonar/desktop/Screens.kt +++ b/app/src/main/kotlin/com/shonar/desktop/Screens.kt @@ -1332,17 +1332,17 @@ fun SettingsScreen(state: DesktopState) { PillChip(selected = mode == ThemeMode.DEFAULT, onClick = { state.setThemeMode(ThemeMode.DEFAULT) }, label = "Default") - PillChip(selected = mode == ThemeMode.MERIDIAN, - onClick = { state.setThemeMode(ThemeMode.MERIDIAN) }, - label = "Meridian") + PillChip(selected = mode == ThemeMode.DARK, + onClick = { state.setThemeMode(ThemeMode.DARK) }, + label = "Dark") PillChip(selected = mode == ThemeMode.LIGHT, onClick = { state.setThemeMode(ThemeMode.LIGHT) }, label = "Light") } HelperText("Default is the Android companion app's palette (navy + " + - "teal) — so desktop and phone read as one product. Meridian " + - "is the charcoal/blue look; Light mirrors the same hierarchy " + - "on paper tones. Applied instantly.") + "teal) — so desktop and phone read as one product. Dark is " + + "the charcoal/blue look; Light is a warm-paper mode easy on " + + "the eyes. Applied instantly.") SectionHeader("Recordings folder") Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(Shonar.Space2)) { diff --git a/app/src/main/kotlin/com/shonar/desktop/Theme.kt b/app/src/main/kotlin/com/shonar/desktop/Theme.kt index 60a5f0d..8c90bc3 100644 --- a/app/src/main/kotlin/com/shonar/desktop/Theme.kt +++ b/app/src/main/kotlin/com/shonar/desktop/Theme.kt @@ -110,21 +110,24 @@ private val DarkPalette = ShonarPalette( highlightTint = Color(0xFF573440), // exact mauve row wash ) -/** Light mode: neutral-cool paper; blue and pink darken to AA values - * (the highlight pink would be illegible at #FB3F7F on white). */ +/** Light mode: warm paper, not white — a full-white page glares under + * room lighting (user note, Sep 21). Cream-beige page + off-white + * cards keep hierarchy without the brightness; ink softens to a warm + * charcoal, borders to a warm taupe. Accent and pink darken to keep + * AA contrast on the beige ground. */ private val LightPalette = ShonarPalette( - background = Color(0xFFF4F5F8), // page: cool paper - surface = Color(0xFFFFFFFF), // cards, fields, pills - surfaceAlt = Color(0xFFE9ECF2), // pressed / hover / inset - border = Color(0xFFD7DBE4), // hairline on light + background = Color(0xFFEDEAE3), // page: warm paper (not #FFF) + surface = Color(0xFFFAF7F0), // cards: soft off-white + surfaceAlt = Color(0xFFE3DFD5), // pressed / hover / inset + border = Color(0xFFCFC9BB), // hairline on light accent = Color(0xFF0550AE), // deep blue: AA on paper accentStrong = Color(0xFF0B3E78), // filled-accent hover depth accentGlow = Color(0x260969DA), // soft halo (~15% blue) inkOnAccent = Color(0xFFF4F8FF), // text on filled accent - textPrimary = Color(0xFF1C2028), - textSecondary = Color(0xFF585F6C), - textMuted = Color(0xFF828A97), - error = Color(0xFFBA1A1A), // AA red on white + textPrimary = Color(0xFF26231D), // warm charcoal, not pure black + textSecondary = Color(0xFF5B564C), + textMuted = Color(0xFF857F72), + error = Color(0xFFBA1A1A), // AA red on paper onError = Color(0xFFFFF8F7), highlight = Color(0xFFC2185B), // AA rose: recording highlight highlightTint = Color(0x1AC2185B), // faint rose row wash @@ -159,11 +162,11 @@ private val SonarPalette = ShonarPalette( ) /** Which palette the app renders in. Persisted as "default" / - * "meridian" / "light" (legacy "dark"/"sonar" load as DEFAULT). + * "dark" / "light" (legacy "meridian"/"sonar"/"dark" values all map + * sensibly; old "dark" meant the charcoal palette → DARK). * DEFAULT mirrors the Android companion app's palette so the two read - * as one product; MERIDIAN is the charcoal/blue look from the Sep - * design pass, kept optional. */ -enum class ThemeMode { DEFAULT, MERIDIAN, LIGHT } + * as one product; DARK is the charcoal/blue look, kept optional. */ +enum class ThemeMode { DEFAULT, DARK, LIGHT } object Shonar { // ---- palette routing ---- @@ -376,7 +379,7 @@ fun ShonarTheme( ) { val palette = when (mode) { ThemeMode.LIGHT -> LightPalette - ThemeMode.MERIDIAN -> DarkPalette + ThemeMode.DARK -> DarkPalette ThemeMode.DEFAULT -> SonarPalette } // Every typography tier carries explicit per-palette ink: a TextStyle