Theme: 'Meridian' renamed to 'Dark' (legacy 'meridian'/'dark' prefs load it); Light mode retoned to warm paper (page #EDEAE3, off-white cards, warm-charcoal ink) — full white was glaring per user
This commit is contained in:
parent
a4cd446926
commit
7ec6229d76
3 changed files with 28 additions and 25 deletions
|
|
@ -160,7 +160,7 @@ class DesktopState(private val appDir: File = defaultAppDir()) {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
prefs.putString(KEY_THEME, when (mode) {
|
prefs.putString(KEY_THEME, when (mode) {
|
||||||
ThemeMode.LIGHT -> "light"
|
ThemeMode.LIGHT -> "light"
|
||||||
ThemeMode.MERIDIAN -> "meridian"
|
ThemeMode.DARK -> "dark"
|
||||||
ThemeMode.DEFAULT -> "default"
|
ThemeMode.DEFAULT -> "default"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -196,10 +196,10 @@ class DesktopState(private val appDir: File = defaultAppDir()) {
|
||||||
?.let { _sortOrder.value = it }
|
?.let { _sortOrder.value = it }
|
||||||
_summarizer.value = prefs.getString(KEY_SUMMARIZER) ?: "auto"
|
_summarizer.value = prefs.getString(KEY_SUMMARIZER) ?: "auto"
|
||||||
_themeMode.value = when (prefs.getString(KEY_THEME)) {
|
_themeMode.value = when (prefs.getString(KEY_THEME)) {
|
||||||
// legacy "dark" (meridian-era default) now means Sonar;
|
// legacy values: "dark" was always the charcoal palette;
|
||||||
// pick Meridian explicitly to get the old look back
|
// "meridian" is that palette renamed; "sonar" became Default
|
||||||
"light" -> ThemeMode.LIGHT
|
"light" -> ThemeMode.LIGHT
|
||||||
"meridian" -> ThemeMode.MERIDIAN
|
"meridian", "dark" -> ThemeMode.DARK
|
||||||
else -> ThemeMode.DEFAULT
|
else -> ThemeMode.DEFAULT
|
||||||
}
|
}
|
||||||
loadNotifyState()
|
loadNotifyState()
|
||||||
|
|
|
||||||
|
|
@ -1332,17 +1332,17 @@ fun SettingsScreen(state: DesktopState) {
|
||||||
PillChip(selected = mode == ThemeMode.DEFAULT,
|
PillChip(selected = mode == ThemeMode.DEFAULT,
|
||||||
onClick = { state.setThemeMode(ThemeMode.DEFAULT) },
|
onClick = { state.setThemeMode(ThemeMode.DEFAULT) },
|
||||||
label = "Default")
|
label = "Default")
|
||||||
PillChip(selected = mode == ThemeMode.MERIDIAN,
|
PillChip(selected = mode == ThemeMode.DARK,
|
||||||
onClick = { state.setThemeMode(ThemeMode.MERIDIAN) },
|
onClick = { state.setThemeMode(ThemeMode.DARK) },
|
||||||
label = "Meridian")
|
label = "Dark")
|
||||||
PillChip(selected = mode == ThemeMode.LIGHT,
|
PillChip(selected = mode == ThemeMode.LIGHT,
|
||||||
onClick = { state.setThemeMode(ThemeMode.LIGHT) },
|
onClick = { state.setThemeMode(ThemeMode.LIGHT) },
|
||||||
label = "Light")
|
label = "Light")
|
||||||
}
|
}
|
||||||
HelperText("Default is the Android companion app's palette (navy + " +
|
HelperText("Default is the Android companion app's palette (navy + " +
|
||||||
"teal) — so desktop and phone read as one product. Meridian " +
|
"teal) — so desktop and phone read as one product. Dark is " +
|
||||||
"is the charcoal/blue look; Light mirrors the same hierarchy " +
|
"the charcoal/blue look; Light is a warm-paper mode easy on " +
|
||||||
"on paper tones. Applied instantly.")
|
"the eyes. Applied instantly.")
|
||||||
SectionHeader("Recordings folder")
|
SectionHeader("Recordings folder")
|
||||||
Row(verticalAlignment = Alignment.CenterVertically,
|
Row(verticalAlignment = Alignment.CenterVertically,
|
||||||
horizontalArrangement = Arrangement.spacedBy(Shonar.Space2)) {
|
horizontalArrangement = Arrangement.spacedBy(Shonar.Space2)) {
|
||||||
|
|
|
||||||
|
|
@ -110,21 +110,24 @@ private val DarkPalette = ShonarPalette(
|
||||||
highlightTint = Color(0xFF573440), // exact mauve row wash
|
highlightTint = Color(0xFF573440), // exact mauve row wash
|
||||||
)
|
)
|
||||||
|
|
||||||
/** Light mode: neutral-cool paper; blue and pink darken to AA values
|
/** Light mode: warm paper, not white — a full-white page glares under
|
||||||
* (the highlight pink would be illegible at #FB3F7F on white). */
|
* 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(
|
private val LightPalette = ShonarPalette(
|
||||||
background = Color(0xFFF4F5F8), // page: cool paper
|
background = Color(0xFFEDEAE3), // page: warm paper (not #FFF)
|
||||||
surface = Color(0xFFFFFFFF), // cards, fields, pills
|
surface = Color(0xFFFAF7F0), // cards: soft off-white
|
||||||
surfaceAlt = Color(0xFFE9ECF2), // pressed / hover / inset
|
surfaceAlt = Color(0xFFE3DFD5), // pressed / hover / inset
|
||||||
border = Color(0xFFD7DBE4), // hairline on light
|
border = Color(0xFFCFC9BB), // hairline on light
|
||||||
accent = Color(0xFF0550AE), // deep blue: AA on paper
|
accent = Color(0xFF0550AE), // deep blue: AA on paper
|
||||||
accentStrong = Color(0xFF0B3E78), // filled-accent hover depth
|
accentStrong = Color(0xFF0B3E78), // filled-accent hover depth
|
||||||
accentGlow = Color(0x260969DA), // soft halo (~15% blue)
|
accentGlow = Color(0x260969DA), // soft halo (~15% blue)
|
||||||
inkOnAccent = Color(0xFFF4F8FF), // text on filled accent
|
inkOnAccent = Color(0xFFF4F8FF), // text on filled accent
|
||||||
textPrimary = Color(0xFF1C2028),
|
textPrimary = Color(0xFF26231D), // warm charcoal, not pure black
|
||||||
textSecondary = Color(0xFF585F6C),
|
textSecondary = Color(0xFF5B564C),
|
||||||
textMuted = Color(0xFF828A97),
|
textMuted = Color(0xFF857F72),
|
||||||
error = Color(0xFFBA1A1A), // AA red on white
|
error = Color(0xFFBA1A1A), // AA red on paper
|
||||||
onError = Color(0xFFFFF8F7),
|
onError = Color(0xFFFFF8F7),
|
||||||
highlight = Color(0xFFC2185B), // AA rose: recording highlight
|
highlight = Color(0xFFC2185B), // AA rose: recording highlight
|
||||||
highlightTint = Color(0x1AC2185B), // faint rose row wash
|
highlightTint = Color(0x1AC2185B), // faint rose row wash
|
||||||
|
|
@ -159,11 +162,11 @@ private val SonarPalette = ShonarPalette(
|
||||||
)
|
)
|
||||||
|
|
||||||
/** Which palette the app renders in. Persisted as "default" /
|
/** 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
|
* DEFAULT mirrors the Android companion app's palette so the two read
|
||||||
* as one product; MERIDIAN is the charcoal/blue look from the Sep
|
* as one product; DARK is the charcoal/blue look, kept optional. */
|
||||||
* design pass, kept optional. */
|
enum class ThemeMode { DEFAULT, DARK, LIGHT }
|
||||||
enum class ThemeMode { DEFAULT, MERIDIAN, LIGHT }
|
|
||||||
|
|
||||||
object Shonar {
|
object Shonar {
|
||||||
// ---- palette routing ----
|
// ---- palette routing ----
|
||||||
|
|
@ -376,7 +379,7 @@ fun ShonarTheme(
|
||||||
) {
|
) {
|
||||||
val palette = when (mode) {
|
val palette = when (mode) {
|
||||||
ThemeMode.LIGHT -> LightPalette
|
ThemeMode.LIGHT -> LightPalette
|
||||||
ThemeMode.MERIDIAN -> DarkPalette
|
ThemeMode.DARK -> DarkPalette
|
||||||
ThemeMode.DEFAULT -> SonarPalette
|
ThemeMode.DEFAULT -> SonarPalette
|
||||||
}
|
}
|
||||||
// Every typography tier carries explicit per-palette ink: a TextStyle
|
// Every typography tier carries explicit per-palette ink: a TextStyle
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue