Bläddra i källkod

[优化] 为Compose界面实现了View系统的主题系统

HapeLee 10 månader sedan
förälder
incheckning
8e56c49538

+ 4 - 58
app/src/main/java/io/legado/app/base/BaseComposeActivity.kt

@@ -19,6 +19,8 @@ import io.legado.app.constant.Theme
 import io.legado.app.help.config.AppConfig
 import io.legado.app.help.config.AppConfig
 import io.legado.app.help.config.ThemeConfig
 import io.legado.app.help.config.ThemeConfig
 import io.legado.app.lib.theme.primaryColor
 import io.legado.app.lib.theme.primaryColor
+import io.legado.app.ui.theme.AppTheme
+import io.legado.app.ui.theme.ThemeState
 import io.legado.app.utils.disableAutoFill
 import io.legado.app.utils.disableAutoFill
 import io.legado.app.utils.fullScreen
 import io.legado.app.utils.fullScreen
 import io.legado.app.utils.getPrefString
 import io.legado.app.utils.getPrefString
@@ -39,7 +41,6 @@ abstract class BaseComposeActivity(
     protected abstract fun Content()
     protected abstract fun Content()
 
 
     override fun onCreate(savedInstanceState: Bundle?) {
     override fun onCreate(savedInstanceState: Bundle?) {
-        initTheme()
         window.decorView.disableAutoFill()
         window.decorView.disableAutoFill()
         AppContextWrapper.applyLocaleAndFont(this)
         AppContextWrapper.applyLocaleAndFont(this)
 
 
@@ -49,7 +50,7 @@ abstract class BaseComposeActivity(
         // Compose 入口
         // Compose 入口
         setContent {
         setContent {
             AppTheme {
             AppTheme {
-                Surface(color = MaterialTheme.colorScheme.background) {
+                Surface() {
                     Content()
                     Content()
                 }
                 }
             }
             }
@@ -84,64 +85,9 @@ abstract class BaseComposeActivity(
 
 
     open fun observeLiveBus() {
     open fun observeLiveBus() {
         observeEvent<String>(EventBus.RECREATE) {
         observeEvent<String>(EventBus.RECREATE) {
+            ThemeState.updateThemeMode()
             recreate()
             recreate()
         }
         }
     }
     }
 
 
-    open fun initTheme() {
-        when (getPrefString("app_theme", "0")) {
-            "0" -> {
-                DynamicColors.applyToActivitiesIfAvailable(application)
-            }
-            "1" -> setTheme(R.style.Theme_Base_GR)
-            "2" -> setTheme(R.style.Theme_Base_Lemon)
-            "3" -> setTheme(R.style.Theme_Base_WH)
-            "4" -> setTheme(R.style.Theme_Base_Elink)
-            "5" -> setTheme(R.style.Theme_Base_Sora)
-            "6" -> setTheme(R.style.Theme_Base_August)
-            "7" -> setTheme(R.style.Theme_Base_Carlotta)
-            "8" -> setTheme(R.style.Theme_Base_Koharu)
-            "9" -> setTheme(R.style.Theme_Base_Yuuka)
-            "10" -> setTheme(R.style.Theme_Base_Phoebe)
-            "11" -> setTheme(R.style.Theme_Base_Mujika)
-            "12" -> {
-                if (AppConfig.customMode == "accent")
-                    setTheme(R.style.ThemeOverlay_WhiteBackground)
-
-                val colorImagePath = getPrefString(PreferKey.colorImage)
-                if (!colorImagePath.isNullOrBlank()) {
-                    val file = File(colorImagePath)
-                    if (file.exists()) {
-                        val bitmap = BitmapFactory.decodeFile(file.absolutePath)
-                        if (bitmap != null) {
-                            val colorAccuracy = true
-                            val targetWidth = if (colorAccuracy) (bitmap.width / 4).coerceAtMost(256) else 16
-                            val targetHeight = if (colorAccuracy) (bitmap.height / 4).coerceAtMost(256) else 16
-                            val scaledBitmap = bitmap.scale(targetWidth, targetHeight, false)
-
-                            val options = DynamicColorsOptions.Builder()
-                                .setContentBasedSource(scaledBitmap)
-                                .build()
-
-                            DynamicColors.applyToActivitiesIfAvailable(application, options)
-                            bitmap.recycle()
-                        }
-                    }
-                }else{
-                    DynamicColors.applyToActivitiesIfAvailable(
-                        application,
-                        DynamicColorsOptions.Builder()
-                            .setContentBasedSource(application.primaryColor)
-                            .build()
-                    )
-                }
-            }
-
-            "13" -> setTheme(R.style.AppTheme_Transparent)
-        }
-
-        if (AppConfig.pureBlack)
-            setTheme(R.style.ThemeOverlay_PureBlack)
-    }
-
 }
 }

+ 0 - 39
app/src/main/java/io/legado/app/base/Theme.kt

@@ -1,39 +0,0 @@
-package io.legado.app.base
-
-import androidx.compose.material3.*
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.platform.LocalContext
-import androidx.compose.foundation.isSystemInDarkTheme
-
-@OptIn(ExperimentalMaterial3ExpressiveApi::class)
-@Composable
-fun AppTheme(
-    darkTheme: Boolean = isSystemInDarkTheme(),
-    dynamicColor: Boolean = true,
-    content: @Composable () -> Unit
-) {
-    val context = LocalContext.current
-    val motionScheme = MotionScheme.expressive()
-    val colorScheme = when {
-        dynamicColor && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S ->
-            if (darkTheme) dynamicDarkColorScheme(context)
-            else dynamicLightColorScheme(context)
-
-        darkTheme -> darkColorScheme()
-        else -> lightColorScheme()
-    }
-
-    MaterialExpressiveTheme(
-        colorScheme = colorScheme,
-        typography = AppTypography,
-        motionScheme = motionScheme,
-        shapes = AppShapes,
-        content = content
-    )
-}
-
-// Material3 Typography
-val AppTypography = Typography()
-
-// Material3 Shapes
-val AppShapes = Shapes()

+ 3 - 0
app/src/main/java/io/legado/app/di/appModule.kt

@@ -12,6 +12,7 @@ import io.legado.app.ui.book.bookmark.AllBookmarkViewModel
 import io.legado.app.ui.book.explore.ExploreShowViewModel
 import io.legado.app.ui.book.explore.ExploreShowViewModel
 import io.legado.app.ui.book.readRecord.ReadRecordViewModel
 import io.legado.app.ui.book.readRecord.ReadRecordViewModel
 import io.legado.app.ui.book.searchContent.SearchContentViewModel
 import io.legado.app.ui.book.searchContent.SearchContentViewModel
+import io.legado.app.ui.main.my.MyViewModel
 import io.legado.app.ui.replace.ReplaceRuleViewModel
 import io.legado.app.ui.replace.ReplaceRuleViewModel
 import io.legado.app.ui.replace.edit.ReplaceEditViewModel
 import io.legado.app.ui.replace.edit.ReplaceEditViewModel
 import org.koin.android.ext.koin.androidApplication
 import org.koin.android.ext.koin.androidApplication
@@ -49,4 +50,6 @@ val appModule = module {
     single { SearchContentRepository() }
     single { SearchContentRepository() }
     single { BookRepository() }
     single { BookRepository() }
     viewModel { SearchContentViewModel(get(), get()) }
     viewModel { SearchContentViewModel(get(), get()) }
+
+    viewModel { MyViewModel(get()) }
 }
 }

+ 6 - 0
app/src/main/java/io/legado/app/help/config/AppConfig.kt

@@ -26,6 +26,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
     val isCronet = appCtx.getPrefBoolean(PreferKey.cronet)
     val isCronet = appCtx.getPrefBoolean(PreferKey.cronet)
     var useAntiAlias = appCtx.getPrefBoolean(PreferKey.antiAlias)
     var useAntiAlias = appCtx.getPrefBoolean(PreferKey.antiAlias)
     var userAgent: String = getPrefUserAgent()
     var userAgent: String = getPrefUserAgent()
+
     var isEInkMode = appCtx.getPrefString("app_theme", "0") == "4"
     var isEInkMode = appCtx.getPrefString("app_theme", "0") == "4"
     var isTransparent = appCtx.getPrefString("app_theme", "0") == "13"
     var isTransparent = appCtx.getPrefString("app_theme", "0") == "13"
     var customMode = appCtx.getPrefString(PreferKey.customMode)
     var customMode = appCtx.getPrefString(PreferKey.customMode)
@@ -51,6 +52,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
     var mangaClickActionBR = appCtx.getPrefInt(PreferKey.mangaClickActionBR, 1)
     var mangaClickActionBR = appCtx.getPrefInt(PreferKey.mangaClickActionBR, 1)
 
 
     var themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
     var themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
+    var AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
     var useDefaultCover = appCtx.getPrefBoolean(PreferKey.useDefaultCover, false)
     var useDefaultCover = appCtx.getPrefBoolean(PreferKey.useDefaultCover, false)
     var optimizeRender = CanvasRecorderFactory.isSupport
     var optimizeRender = CanvasRecorderFactory.isSupport
             && appCtx.getPrefBoolean(PreferKey.optimizeRender, false)
             && appCtx.getPrefBoolean(PreferKey.optimizeRender, false)
@@ -59,6 +61,10 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
     override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
     override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
         when (key) {
         when (key) {
 
 
+            PreferKey.appTheme -> {
+                AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
+            }
+
             PreferKey.themeMode -> {
             PreferKey.themeMode -> {
                 themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
                 themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
             }
             }

+ 1 - 1
app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt

@@ -4,7 +4,7 @@ import android.os.Bundle
 import androidx.activity.compose.setContent
 import androidx.activity.compose.setContent
 import androidx.activity.viewModels
 import androidx.activity.viewModels
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Composable
-import io.legado.app.base.AppTheme
+import io.legado.app.ui.theme.AppTheme
 import io.legado.app.base.BaseComposeActivity
 import io.legado.app.base.BaseComposeActivity
 import io.legado.app.ui.book.changecover.ChangeCoverDialog
 import io.legado.app.ui.book.changecover.ChangeCoverDialog
 
 

+ 1 - 1
app/src/main/java/io/legado/app/ui/book/readRecord/ReadRecordActivity.kt

@@ -3,7 +3,7 @@ package io.legado.app.ui.book.readRecord
 import android.os.Bundle
 import android.os.Bundle
 import androidx.compose.runtime.*
 import androidx.compose.runtime.*
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.lifecycleScope
-import io.legado.app.base.AppTheme
+import io.legado.app.ui.theme.AppTheme
 import io.legado.app.data.appDb
 import io.legado.app.data.appDb
 import io.legado.app.utils.startActivityForBook
 import io.legado.app.utils.startActivityForBook
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Dispatchers

+ 1 - 1
app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentActivity.kt

@@ -2,7 +2,7 @@ package io.legado.app.ui.book.searchContent
 
 
 import android.os.Bundle
 import android.os.Bundle
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Composable
-import io.legado.app.base.AppTheme
+import io.legado.app.ui.theme.AppTheme
 import io.legado.app.base.BaseComposeActivity
 import io.legado.app.base.BaseComposeActivity
 
 
 class SearchContentActivity : BaseComposeActivity() {
 class SearchContentActivity : BaseComposeActivity() {

+ 1 - 1
app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt

@@ -4,7 +4,7 @@ import android.os.Bundle
 import androidx.activity.compose.setContent
 import androidx.activity.compose.setContent
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.app.AppCompatActivity
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Composable
-import io.legado.app.base.AppTheme
+import io.legado.app.ui.theme.AppTheme
 import io.legado.app.base.BaseComposeActivity
 import io.legado.app.base.BaseComposeActivity
 
 
 class ReplaceRuleActivity : BaseComposeActivity() {
 class ReplaceRuleActivity : BaseComposeActivity() {

+ 1 - 1
app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditActivity.kt

@@ -4,7 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.content.Intent
 import androidx.activity.compose.setContent
 import androidx.activity.compose.setContent
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Composable
-import io.legado.app.base.AppTheme
+import io.legado.app.ui.theme.AppTheme
 import io.legado.app.base.BaseComposeActivity
 import io.legado.app.base.BaseComposeActivity
 
 
 /**
 /**

+ 97 - 0
app/src/main/java/io/legado/app/ui/theme/AppTheme.kt

@@ -0,0 +1,97 @@
+package io.legado.app.ui.theme
+
+import android.os.Build
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
+import androidx.compose.material3.MaterialExpressiveTheme
+import androidx.compose.material3.MotionScheme
+import androidx.compose.material3.Shapes
+import androidx.compose.material3.Typography
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.dynamicDarkColorScheme
+import androidx.compose.material3.dynamicLightColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.theme.AppColorSchemes.AugustDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.AugustLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.CarlottaDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.CarlottaLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.ElinkDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.ElinkLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.GRDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.GRLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.KoharuDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.KoharuLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.LemonDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.LemonLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.MujikaDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.MujikaLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.PhoebeDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.PhoebeLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.SoraDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.SoraLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.TransparentDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.TransparentLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.WHDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.WHLightColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.YuukaDarkColorScheme
+import io.legado.app.ui.theme.AppColorSchemes.YuukaLightColorScheme
+
+@OptIn(ExperimentalMaterial3ExpressiveApi::class)
+@Composable
+fun AppTheme(
+    darkTheme: Boolean = isSystemInDarkTheme(),
+    content: @Composable () -> Unit
+) {
+    val context = LocalContext.current
+    val motionScheme = MotionScheme.expressive()
+    val appThemeMode by ThemeState.themeMode.collectAsState()
+
+    var colorScheme = when (appThemeMode) {
+        AppThemeMode.Dynamic, AppThemeMode.ContentBased -> {
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+                if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
+            } else {
+                if (darkTheme) darkColorScheme() else lightColorScheme()
+            }
+        }
+        AppThemeMode.GR -> if (darkTheme) GRDarkColorScheme else GRLightColorScheme
+        AppThemeMode.Lemon -> if (darkTheme) LemonDarkColorScheme else LemonLightColorScheme
+        AppThemeMode.WH -> if (darkTheme) WHDarkColorScheme else WHLightColorScheme
+        AppThemeMode.Elink -> if (darkTheme) ElinkDarkColorScheme else ElinkLightColorScheme
+        AppThemeMode.Sora -> if (darkTheme) SoraDarkColorScheme else SoraLightColorScheme
+        AppThemeMode.August -> if (darkTheme) AugustDarkColorScheme else AugustLightColorScheme
+        AppThemeMode.Carlotta -> if (darkTheme) CarlottaDarkColorScheme else CarlottaLightColorScheme
+        AppThemeMode.Koharu -> if (darkTheme) KoharuDarkColorScheme else KoharuLightColorScheme
+        AppThemeMode.Yuuka -> if (darkTheme) YuukaDarkColorScheme else YuukaLightColorScheme
+        AppThemeMode.Phoebe -> if (darkTheme) PhoebeDarkColorScheme else PhoebeLightColorScheme
+        AppThemeMode.Mujika -> if (darkTheme) MujikaDarkColorScheme else MujikaLightColorScheme
+        AppThemeMode.Transparent -> if (darkTheme) TransparentDarkColorScheme else TransparentLightColorScheme
+    }
+
+    if (darkTheme && AppConfig.pureBlack) {
+        colorScheme = colorScheme.copy(
+            background = Color.Black,
+            surface = Color.Black
+        )
+    }
+
+    MaterialExpressiveTheme(
+        colorScheme = colorScheme,
+        typography = AppTypography,
+        motionScheme = motionScheme,
+        shapes = AppShapes,
+        content = content
+    )
+}
+
+// Material3 Typography
+val AppTypography = Typography()
+
+// Material3 Shapes
+val AppShapes = Shapes()

+ 36 - 0
app/src/main/java/io/legado/app/ui/theme/AppThemeMode.kt

@@ -0,0 +1,36 @@
+package io.legado.app.ui.theme
+
+enum class AppThemeMode {
+    Dynamic,
+    GR,
+    Lemon,
+    WH,
+    Elink,
+    Sora,
+    August,
+    Carlotta,
+    Koharu,
+    Yuuka,
+    Phoebe,
+    Mujika,
+    ContentBased,
+    Transparent
+}
+
+fun resolveThemeMode(value: String): AppThemeMode = when (value) {
+    "0" -> AppThemeMode.Dynamic
+    "1" -> AppThemeMode.GR
+    "2" -> AppThemeMode.Lemon
+    "3" -> AppThemeMode.WH
+    "4" -> AppThemeMode.Elink
+    "5" -> AppThemeMode.Sora
+    "6" -> AppThemeMode.August
+    "7" -> AppThemeMode.Carlotta
+    "8" -> AppThemeMode.Koharu
+    "9" -> AppThemeMode.Yuuka
+    "10" -> AppThemeMode.Phoebe
+    "11" -> AppThemeMode.Mujika
+    "12" -> AppThemeMode.ContentBased
+    "13" -> AppThemeMode.Transparent
+    else -> AppThemeMode.Dynamic
+}

+ 1208 - 0
app/src/main/java/io/legado/app/ui/theme/ColorSchemes.kt

@@ -0,0 +1,1208 @@
+package io.legado.app.ui.theme
+
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.ui.graphics.Color
+
+object AppColorSchemes {
+    val GRLightColorScheme = lightColorScheme(
+        primary = Color(0xFF4C662B),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFFCDEDA3),
+        onPrimaryContainer = Color(0xFF354E16),
+        secondary = Color(0xFF586249),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFDCE7C8),
+        onSecondaryContainer = Color(0xFF404A33),
+        tertiary = Color(0xFF386663),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFFBCECE7),
+        onTertiaryContainer = Color(0xFF1F4E4B),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFF9FAEF),
+        onBackground = Color(0xFF1A1C16),
+        surface = Color(0xFFF9FAEF),
+        onSurface = Color(0xFF1A1C16),
+        surfaceVariant = Color(0xFFE1E4D5),
+        onSurfaceVariant = Color(0xFF44483D),
+        outline = Color(0xFF75796C),
+        outlineVariant = Color(0xFFC5C8BA),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF2F312A),
+        inverseOnSurface = Color(0xFFF1F2E6),
+        inversePrimary = Color(0xFFB1D18A),
+        primaryFixed = Color(0xFFCDEDA3),
+        onPrimaryFixed = Color(0xFF102000),
+        primaryFixedDim = Color(0xFFB1D18A),
+        onPrimaryFixedVariant = Color(0xFF354E16),
+        secondaryFixed = Color(0xFFDCE7C8),
+        onSecondaryFixed = Color(0xFF181E0B),
+        secondaryFixedDim = Color(0xFFBFCBAD),
+        onSecondaryFixedVariant = Color(0xFF404A33),
+        tertiaryFixed = Color(0xFFBCECE7),
+        onTertiaryFixed = Color(0xFF00201E),
+        tertiaryFixedDim = Color(0xFFA0D0CB),
+        onTertiaryFixedVariant = Color(0xFF1F4E4B),
+        surfaceDim = Color(0xFFDADBD0),
+        surfaceBright = Color(0xFFF9FAEF),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFF3F4E9),
+        surfaceContainer = Color(0xFFEEEFE3),
+        surfaceContainerHigh = Color(0xFFE8E9DE),
+        surfaceContainerHighest = Color(0xFFE2E3D8),
+    )
+
+    val GRDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFB1D18A),
+        onPrimary = Color(0xFF1F3701),
+        primaryContainer = Color(0xFF354E16),
+        onPrimaryContainer = Color(0xFFCDEDA3),
+        secondary = Color(0xFFBFCBAD),
+        onSecondary = Color(0xFF2A331E),
+        secondaryContainer = Color(0xFF404A33),
+        onSecondaryContainer = Color(0xFFDCE7C8),
+        tertiary = Color(0xFFA0D0CB),
+        onTertiary = Color(0xFF003735),
+        tertiaryContainer = Color(0xFF1F4E4B),
+        onTertiaryContainer = Color(0xFFBCECE7),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF12140E),
+        onBackground = Color(0xFFE2E3D8),
+        surface = Color(0xFF12140E),
+        onSurface = Color(0xFFE2E3D8),
+        surfaceVariant = Color(0xFF44483D),
+        onSurfaceVariant = Color(0xFFC5C8BA),
+        outline = Color(0xFF8F9285),
+        outlineVariant = Color(0xFF44483D),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFE2E3D8),
+        inverseOnSurface = Color(0xFF2F312A),
+        inversePrimary = Color(0xFF4C662B),
+        primaryFixed = Color(0xFFCDEDA3),
+        onPrimaryFixed = Color(0xFF102000),
+        primaryFixedDim = Color(0xFFB1D18A),
+        onPrimaryFixedVariant = Color(0xFF354E16),
+        secondaryFixed = Color(0xFFDCE7C8),
+        onSecondaryFixed = Color(0xFF181E0B),
+        secondaryFixedDim = Color(0xFFBFCBAD),
+        onSecondaryFixedVariant = Color(0xFF404A33),
+        tertiaryFixed = Color(0xFFBCECE7),
+        onTertiaryFixed = Color(0xFF00201E),
+        tertiaryFixedDim = Color(0xFFA0D0CB),
+        onTertiaryFixedVariant = Color(0xFF1F4E4B),
+        surfaceDim = Color(0xFF12140E),
+        surfaceBright = Color(0xFF383A32),
+        surfaceContainerLowest = Color(0xFF0C0F09),
+        surfaceContainerLow = Color(0xFF1A1C16),
+        surfaceContainer = Color(0xFF1E201A),
+        surfaceContainerHigh = Color(0xFF282B24),
+        surfaceContainerHighest = Color(0xFF33362E),
+    )
+
+    val LemonLightColorScheme = lightColorScheme(
+        primary = Color(0xFF6D5E0F),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFFF8E287),
+        onPrimaryContainer = Color(0xFF534600),
+        secondary = Color(0xFF665E40),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFEEE2BC),
+        onSecondaryContainer = Color(0xFF4E472A),
+        tertiary = Color(0xFF43664E),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFFC5ECCE),
+        onTertiaryContainer = Color(0xFF2C4E38),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFFFF9EE),
+        onBackground = Color(0xFF1E1B13),
+        surface = Color(0xFFFFF9EE),
+        onSurface = Color(0xFF1E1B13),
+        surfaceVariant = Color(0xFFEAE2D0),
+        onSurfaceVariant = Color(0xFF4B4739),
+        outline = Color(0xFF7C7767),
+        outlineVariant = Color(0xFFCDC6B4),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF333027),
+        inverseOnSurface = Color(0xFFF7F0E2),
+        inversePrimary = Color(0xFFDBC66E),
+        primaryFixed = Color(0xFFF8E287),
+        onPrimaryFixed = Color(0xFF221B00),
+        primaryFixedDim = Color(0xFFDBC66E),
+        onPrimaryFixedVariant = Color(0xFF534600),
+        secondaryFixed = Color(0xFFEEE2BC),
+        onSecondaryFixed = Color(0xFF201B04),
+        secondaryFixedDim = Color(0xFFD1C6A1),
+        onSecondaryFixedVariant = Color(0xFF4E472A),
+        tertiaryFixed = Color(0xFFC5ECCE),
+        onTertiaryFixed = Color(0xFF002111),
+        tertiaryFixedDim = Color(0xFFA9D0B3),
+        onTertiaryFixedVariant = Color(0xFF2C4E38),
+        surfaceDim = Color(0xFFE0D9CC),
+        surfaceBright = Color(0xFFFFF9EE),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFFAF3E5),
+        surfaceContainer = Color(0xFFF4EDDF),
+        surfaceContainerHigh = Color(0xFFEEE8DA),
+        surfaceContainerHighest = Color(0xFFE8E2D4),
+    )
+
+    val LemonDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFDBC66E),
+        onPrimary = Color(0xFF3A3000),
+        primaryContainer = Color(0xFF534600),
+        onPrimaryContainer = Color(0xFFF8E287),
+        secondary = Color(0xFFD1C6A1),
+        onSecondary = Color(0xFF363016),
+        secondaryContainer = Color(0xFF4E472A),
+        onSecondaryContainer = Color(0xFFEEE2BC),
+        tertiary = Color(0xFFA9D0B3),
+        onTertiary = Color(0xFF143723),
+        tertiaryContainer = Color(0xFF2C4E38),
+        onTertiaryContainer = Color(0xFFC5ECCE),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF15130B),
+        onBackground = Color(0xFFE8E2D4),
+        surface = Color(0xFF15130B),
+        onSurface = Color(0xFFE8E2D4),
+        surfaceVariant = Color(0xFF4B4739),
+        onSurfaceVariant = Color(0xFFCDC6B4),
+        outline = Color(0xFF969080),
+        outlineVariant = Color(0xFF4B4739),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFE8E2D4),
+        inverseOnSurface = Color(0xFF333027),
+        inversePrimary = Color(0xFF6D5E0F),
+        primaryFixed = Color(0xFFF8E287),
+        onPrimaryFixed = Color(0xFF221B00),
+        primaryFixedDim = Color(0xFFDBC66E),
+        onPrimaryFixedVariant = Color(0xFF534600),
+        secondaryFixed = Color(0xFFEEE2BC),
+        onSecondaryFixed = Color(0xFF201B04),
+        secondaryFixedDim = Color(0xFFD1C6A1),
+        onSecondaryFixedVariant = Color(0xFF4E472A),
+        tertiaryFixed = Color(0xFFC5ECCE),
+        onTertiaryFixed = Color(0xFF002111),
+        tertiaryFixedDim = Color(0xFFA9D0B3),
+        onTertiaryFixedVariant = Color(0xFF2C4E38),
+        surfaceDim = Color(0xFF15130B),
+        surfaceBright = Color(0xFF3C3930),
+        surfaceContainerLowest = Color(0xFF100E07),
+        surfaceContainerLow = Color(0xFF1E1B13),
+        surfaceContainer = Color(0xFF222017),
+        surfaceContainerHigh = Color(0xFF2D2A21),
+        surfaceContainerHighest = Color(0xFF38352B),
+    )
+
+    val WHLightColorScheme = lightColorScheme(
+        primary = Color(0xFF5C5C5C),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFF747474),
+        onPrimaryContainer = Color(0xFFFEFCFC),
+        secondary = Color(0xFF5F5E5E),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFE2DFDE),
+        onSecondaryContainer = Color(0xFF636262),
+        tertiary = Color(0xFF5E5B5D),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFF777375),
+        onTertiaryContainer = Color(0xFFFFFBFF),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFFAFAFA),
+        onBackground = Color(0xFF1C1B1B),
+        surface = Color(0xFFF8F8F8),
+        onSurface = Color(0xFF1C1B1B),
+        surfaceVariant = Color(0xFFE0E3E3),
+        onSurfaceVariant = Color(0xFF444748),
+        outline = Color(0xFF747878),
+        outlineVariant = Color(0xFFC4C7C7),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF313030),
+        inverseOnSurface = Color(0xFFF4F0EF),
+        inversePrimary = Color(0xFFC7C6C6),
+        primaryFixed = Color(0xFFE3E2E2),
+        onPrimaryFixed = Color(0xFF1A1C1C),
+        primaryFixedDim = Color(0xFFC7C6C6),
+        onPrimaryFixedVariant = Color(0xFF454747),
+        secondaryFixed = Color(0xFFE2DFDE),
+        onSecondaryFixed = Color(0xFF1C1B1B),
+        secondaryFixedDim = Color(0xFFC6C6C6),
+        onSecondaryFixedVariant = Color(0xFF474747),
+        tertiaryFixed = Color(0xFFE5E2E4),
+        onTertiaryFixed = Color(0xFF1C1B1D),
+        tertiaryFixedDim = Color(0xFFC9C5C7),
+        onTertiaryFixedVariant = Color(0xFF494648),
+        surfaceDim = Color(0xFFDDD9D8),
+        surfaceBright = Color(0xFFF8F8F8),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFF7F3F2),
+        surfaceContainer = Color(0xFFF1EDEC),
+        surfaceContainerHigh = Color(0xFFEBE7E7),
+        surfaceContainerHighest = Color(0xFFE5E2E1),
+    )
+
+    val WHDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFC7C6C6),
+        onPrimary = Color(0xFF303031),
+        primaryContainer = Color(0xFF919090),
+        onPrimaryContainer = Color(0xFF050606),
+        secondary = Color(0xFFC8C6C5),
+        onSecondary = Color(0xFF303030),
+        secondaryContainer = Color(0xFF474746),
+        onSecondaryContainer = Color(0xFFB7B5B4),
+        tertiary = Color(0xFFCBC5C7),
+        onTertiary = Color(0xFF323031),
+        tertiaryContainer = Color(0xFF948F91),
+        onTertiaryContainer = Color(0xFF060506),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF141313),
+        onBackground = Color(0xFFE5E2E1),
+        surface = Color(0xFF141313),
+        onSurface = Color(0xFFE5E2E1),
+        surfaceVariant = Color(0xFF444748),
+        onSurfaceVariant = Color(0xFFC4C7C7),
+        outline = Color(0xFF8E918F),
+        outlineVariant = Color(0xFF444748),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFE5E2E1),
+        inverseOnSurface = Color(0xFF313030),
+        inversePrimary = Color(0xFF5E5E5E),
+        primaryFixed = Color(0xFFE3E2E2),
+        onPrimaryFixed = Color(0xFF1A1C1C),
+        primaryFixedDim = Color(0xFFC7C6C6),
+        onPrimaryFixedVariant = Color(0xFF454747),
+        secondaryFixed = Color(0xFFE2DFDE),
+        onSecondaryFixed = Color(0xFF1C1B1B),
+        secondaryFixedDim = Color(0xFFC6C6C6),
+        onSecondaryFixedVariant = Color(0xFF474747),
+        tertiaryFixed = Color(0xFFE5E2E4),
+        onTertiaryFixed = Color(0xFF1C1B1D),
+        tertiaryFixedDim = Color(0xFFC9C5C7),
+        onTertiaryFixedVariant = Color(0xFF494648),
+        surfaceDim = Color(0xFF141313),
+        surfaceBright = Color(0xFF3A3939),
+        surfaceContainerLowest = Color(0xFF0E0E0E),
+        surfaceContainerLow = Color(0xFF1C1B1B),
+        surfaceContainer = Color(0xFF201F1F),
+        surfaceContainerHigh = Color(0xFF2A2A2A),
+        surfaceContainerHighest = Color(0xFF353434),
+    )
+
+    val ElinkLightColorScheme = lightColorScheme(
+        primary = Color(0xFF000000),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFF000000),
+        onPrimaryContainer = Color(0xFFFFFFFF),
+        secondary = Color(0xFF000000),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFF808080),
+        onSecondaryContainer = Color(0xFFFFFFFF),
+        tertiary = Color(0xFF000000),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFF000000),
+        onTertiaryContainer = Color(0xFFFFFFFF),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFFFFFFF),
+        onBackground = Color(0xFF000000),
+        surface = Color(0xFFFFFFFF),
+        onSurface = Color(0xFF000000),
+        surfaceVariant = Color(0xFFFFFFFF),
+        onSurfaceVariant = Color(0xFF000000),
+        outline = Color(0xFF000000),
+        outlineVariant = Color(0xFF000000),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF313030),
+        inverseOnSurface = Color(0xFFFFFFFF),
+        inversePrimary = Color(0xFFFFFFFF),
+        primaryFixed = Color(0xFFFFFFFF),
+        onPrimaryFixed = Color(0xFF1A1C1C),
+        primaryFixedDim = Color(0xFFC6C6C7),
+        onPrimaryFixedVariant = Color(0xFF454747),
+        secondaryFixed = Color(0xFFE2E2E2),
+        onSecondaryFixed = Color(0xFF1B1B1B),
+        secondaryFixedDim = Color(0xFFC6C6C6),
+        onSecondaryFixedVariant = Color(0xFF474747),
+        tertiaryFixed = Color(0xFFFFFFFF),
+        onTertiaryFixed = Color(0xFF1B1B1B),
+        tertiaryFixedDim = Color(0xFFC6C6C6),
+        onTertiaryFixedVariant = Color(0xFF474747),
+        surfaceDim = Color(0xFFFFFFFF),
+        surfaceBright = Color(0xFFFFFFFF),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFFFFFFF),
+        surfaceContainer = Color(0xFFFFFFFF),
+        surfaceContainerHigh = Color(0xFFFFFFFF),
+        surfaceContainerHighest = Color(0xFFFFFFFF),
+    )
+
+    val ElinkDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFFFFFFF),
+        onPrimary = Color(0xFF000000),
+        primaryContainer = Color(0xFFFFFFFF),
+        onPrimaryContainer = Color(0xFF000000),
+        secondary = Color(0xFFFFFFFF),
+        onSecondary = Color(0xFF000000),
+        secondaryContainer = Color(0xFF808080),
+        onSecondaryContainer = Color(0xFFFFFFFF),
+        tertiary = Color(0xFFFFFFFF),
+        onTertiary = Color(0xFF000000),
+        tertiaryContainer = Color(0xFFFFFFFF),
+        onTertiaryContainer = Color(0xFF000000),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF000000),
+        onBackground = Color(0xFFFFFFFF),
+        surface = Color(0xFF000000),
+        onSurface = Color(0xFFFFFFFF),
+        surfaceVariant = Color(0xFF444846),
+        onSurfaceVariant = Color(0xFFC4C7C5),
+        outline = Color(0xFF8E918F),
+        outlineVariant = Color(0xFF444846),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFE5E2E1),
+        inverseOnSurface = Color(0xFF313030),
+        inversePrimary = Color(0xFF5D5F5F),
+        primaryFixed = Color(0xFFE2E2E2),
+        onPrimaryFixed = Color(0xFF1A1C1C),
+        primaryFixedDim = Color(0xFFC6C6C7),
+        onPrimaryFixedVariant = Color(0xFF454747),
+        secondaryFixed = Color(0xFFE2E2E2),
+        onSecondaryFixed = Color(0xFF1B1B1B),
+        secondaryFixedDim = Color(0xFFC6C6C6),
+        onSecondaryFixedVariant = Color(0xFF474747),
+        tertiaryFixed = Color(0xFFE2E2E2),
+        onTertiaryFixed = Color(0xFF1B1B1B),
+        tertiaryFixedDim = Color(0xFFC6C6C6),
+        onTertiaryFixedVariant = Color(0xFF474747),
+        surfaceDim = Color(0xFF141313),
+        surfaceBright = Color(0xFF3A3939),
+        surfaceContainerLowest = Color(0xFF0E0E0E),
+        surfaceContainerLow = Color(0xFF1C1B1B),
+        surfaceContainer = Color(0xFF000000),
+        surfaceContainerHigh = Color(0xFF2A2A2A),
+        surfaceContainerHighest = Color(0xFF353434),
+    )
+
+    val SoraLightColorScheme = lightColorScheme(
+        primary = Color(0xFF3B608F),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFFD4E3FF),
+        onPrimaryContainer = Color(0xFF214876),
+        secondary = Color(0xFF545F71),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFD8E3F8),
+        onSecondaryContainer = Color(0xFF3D4758),
+        tertiary = Color(0xFF6D5677),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFFF6D9FF),
+        onTertiaryContainer = Color(0xFF543F5E),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFF8F9FF),
+        onBackground = Color(0xFF191C20),
+        surface = Color(0xFFF8F9FF),
+        onSurface = Color(0xFF191C20),
+        surfaceVariant = Color(0xFFDFE2EB),
+        onSurfaceVariant = Color(0xFF43474E),
+        outline = Color(0xFF73777F),
+        outlineVariant = Color(0xFFC3C6CF),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF2E3035),
+        inverseOnSurface = Color(0xFFF0F0F7),
+        inversePrimary = Color(0xFFA5C9FE),
+        primaryFixed = Color(0xFFD4E3FF),
+        onPrimaryFixed = Color(0xFF001C38),
+        primaryFixedDim = Color(0xFFA5C9FE),
+        onPrimaryFixedVariant = Color(0xFF214876),
+        secondaryFixed = Color(0xFFD8E3F8),
+        onSecondaryFixed = Color(0xFF111C2B),
+        secondaryFixedDim = Color(0xFFBCC7DC),
+        onSecondaryFixedVariant = Color(0xFF3D4758),
+        tertiaryFixed = Color(0xFFF6D9FF),
+        onTertiaryFixed = Color(0xFF271731),
+        tertiaryFixedDim = Color(0xFFD9BDE3),
+        onTertiaryFixedVariant = Color(0xFF543F5E),
+        surfaceDim = Color(0xFFD9DAE0),
+        surfaceBright = Color(0xFFF8F9FF),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFF2F3FA),
+        surfaceContainer = Color(0xFFEDEDF4),
+        surfaceContainerHigh = Color(0xFFE7E8EE),
+        surfaceContainerHighest = Color(0xFFE1E2E9),
+    )
+
+    val SoraDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFA5C9FE),
+        onPrimary = Color(0xFF00315D),
+        primaryContainer = Color(0xFF214876),
+        onPrimaryContainer = Color(0xFFD4E3FF),
+        secondary = Color(0xFFBCC7DC),
+        onSecondary = Color(0xFF263141),
+        secondaryContainer = Color(0xFF3D4758),
+        onSecondaryContainer = Color(0xFFD8E3F8),
+        tertiary = Color(0xFFD9BDE3),
+        onTertiary = Color(0xFF3D2946),
+        tertiaryContainer = Color(0xFF543F5E),
+        onTertiaryContainer = Color(0xFFF6D9FF),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF111318),
+        onBackground = Color(0xFFE1E2E9),
+        surface = Color(0xFF111318),
+        onSurface = Color(0xFFE1E2E9),
+        surfaceVariant = Color(0xFF43474E),
+        onSurfaceVariant = Color(0xFFC3C6CF),
+        outline = Color(0xFF8D9199),
+        outlineVariant = Color(0xFF43474E),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFE1E2E9),
+        inverseOnSurface = Color(0xFF2E3035),
+        inversePrimary = Color(0xFF3B608F),
+        primaryFixed = Color(0xFFD4E3FF),
+        onPrimaryFixed = Color(0xFF001C38),
+        primaryFixedDim = Color(0xFFA5C9FE),
+        onPrimaryFixedVariant = Color(0xFF214876),
+        secondaryFixed = Color(0xFFD8E3F8),
+        onSecondaryFixed = Color(0xFF111C2B),
+        secondaryFixedDim = Color(0xFFBCC7DC),
+        onSecondaryFixedVariant = Color(0xFF3D4758),
+        tertiaryFixed = Color(0xFFF6D9FF),
+        onTertiaryFixed = Color(0xFF271731),
+        tertiaryFixedDim = Color(0xFFD9BDE3),
+        onTertiaryFixedVariant = Color(0xFF543F5E),
+        surfaceDim = Color(0xFF111318),
+        surfaceBright = Color(0xFF37393E),
+        surfaceContainerLowest = Color(0xFF0C0E13),
+        surfaceContainerLow = Color(0xFF191C20),
+        surfaceContainer = Color(0xFF1D2024),
+        surfaceContainerHigh = Color(0xFF282A2F),
+        surfaceContainerHighest = Color(0xFF32353A),
+    )
+
+    val AugustLightColorScheme = lightColorScheme(
+        primary = Color(0xFF8F4C37),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFFFFDBD1),
+        onPrimaryContainer = Color(0xFF723522),
+        secondary = Color(0xFF77574D),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFFFDBD1),
+        onSecondaryContainer = Color(0xFF5D4037),
+        tertiary = Color(0xFF6B5D2F),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFFF5E1A7),
+        onTertiaryContainer = Color(0xFF524619),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFFFF8F6),
+        onBackground = Color(0xFF231917),
+        surface = Color(0xFFFFF8F6),
+        onSurface = Color(0xFF231917),
+        surfaceVariant = Color(0xFFF5DED7),
+        onSurfaceVariant = Color(0xFF53433F),
+        outline = Color(0xFF85736E),
+        outlineVariant = Color(0xFFD8C2BC),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF392E2B),
+        inverseOnSurface = Color(0xFFFFEDE8),
+        inversePrimary = Color(0xFFFFB59F),
+        primaryFixed = Color(0xFFFFDBD1),
+        onPrimaryFixed = Color(0xFF3A0B01),
+        primaryFixedDim = Color(0xFFFFB59F),
+        onPrimaryFixedVariant = Color(0xFF723522),
+        secondaryFixed = Color(0xFFFFDBD1),
+        onSecondaryFixed = Color(0xFF2C150E),
+        secondaryFixedDim = Color(0xFFE7BDB2),
+        onSecondaryFixedVariant = Color(0xFF5D4037),
+        tertiaryFixed = Color(0xFFF5E1A7),
+        onTertiaryFixed = Color(0xFF231B00),
+        tertiaryFixedDim = Color(0xFFD8C68D),
+        onTertiaryFixedVariant = Color(0xFF524619),
+        surfaceDim = Color(0xFFE8D6D2),
+        surfaceBright = Color(0xFFFFF8F6),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFFFF1ED),
+        surfaceContainer = Color(0xFFFCEAE5),
+        surfaceContainerHigh = Color(0xFFF7E4E0),
+        surfaceContainerHighest = Color(0xFFF1DFDA),
+    )
+
+    val AugustDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFFFB59F),
+        onPrimary = Color(0xFF561F0E),
+        primaryContainer = Color(0xFF723522),
+        onPrimaryContainer = Color(0xFFFFDBD1),
+        secondary = Color(0xFFE7BDB2),
+        onSecondary = Color(0xFF442A22),
+        secondaryContainer = Color(0xFF5D4037),
+        onSecondaryContainer = Color(0xFFFFDBD1),
+        tertiary = Color(0xFFD8C68D),
+        onTertiary = Color(0xFF3A2F05),
+        tertiaryContainer = Color(0xFF524619),
+        onTertiaryContainer = Color(0xFFF5E1A7),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF1A110F),
+        onBackground = Color(0xFFF1DFDA),
+        surface = Color(0xFF1A110F),
+        onSurface = Color(0xFFF1DFDA),
+        surfaceVariant = Color(0xFF53433F),
+        onSurfaceVariant = Color(0xFFD8C2BC),
+        outline = Color(0xFFA08C87),
+        outlineVariant = Color(0xFF53433F),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFF1DFDA),
+        inverseOnSurface = Color(0xFF392E2B),
+        inversePrimary = Color(0xFF8F4C37),
+        primaryFixed = Color(0xFFFFDBD1),
+        onPrimaryFixed = Color(0xFF3A0B01),
+        primaryFixedDim = Color(0xFFFFB59F),
+        onPrimaryFixedVariant = Color(0xFF723522),
+        secondaryFixed = Color(0xFFFFDBD1),
+        onSecondaryFixed = Color(0xFF2C150E),
+        secondaryFixedDim = Color(0xFFE7BDB2),
+        onSecondaryFixedVariant = Color(0xFF5D4037),
+        tertiaryFixed = Color(0xFFF5E1A7),
+        onTertiaryFixed = Color(0xFF231B00),
+        tertiaryFixedDim = Color(0xFFD8C68D),
+        onTertiaryFixedVariant = Color(0xFF524619),
+        surfaceDim = Color(0xFF1A110F),
+        surfaceBright = Color(0xFF423734),
+        surfaceContainerLowest = Color(0xFF140C0A),
+        surfaceContainerLow = Color(0xFF231917),
+        surfaceContainer = Color(0xFF271D1B),
+        surfaceContainerHigh = Color(0xFF322825),
+        surfaceContainerHighest = Color(0xFF3D322F),
+    )
+
+    val CarlottaLightColorScheme = lightColorScheme(
+        primary = Color(0xFF8B4A62),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFFFFD9E3),
+        onPrimaryContainer = Color(0xFF6F334A),
+        secondary = Color(0xFF74565F),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFFFD9E3),
+        onSecondaryContainer = Color(0xFF5A3F48),
+        tertiary = Color(0xFF7D5635),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFFFFDCC2),
+        onTertiaryContainer = Color(0xFF623F20),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFFFF8F8),
+        onBackground = Color(0xFF22191C),
+        surface = Color(0xFFFFF8F8),
+        onSurface = Color(0xFF22191C),
+        surfaceVariant = Color(0xFFF2DDE2),
+        onSurfaceVariant = Color(0xFF514347),
+        outline = Color(0xFF837377),
+        outlineVariant = Color(0xFFD5C2C6),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF372E30),
+        inverseOnSurface = Color(0xFFFDEDF0),
+        inversePrimary = Color(0xFFFFB0CA),
+        primaryFixed = Color(0xFFFFD9E3),
+        onPrimaryFixed = Color(0xFF39071E),
+        primaryFixedDim = Color(0xFFFFB0CA),
+        onPrimaryFixedVariant = Color(0xFF6F334A),
+        secondaryFixed = Color(0xFFFFD9E3),
+        onSecondaryFixed = Color(0xFF2B151D),
+        secondaryFixedDim = Color(0xFFE2BDC7),
+        onSecondaryFixedVariant = Color(0xFF5A3F48),
+        tertiaryFixed = Color(0xFFFFDCC2),
+        onTertiaryFixed = Color(0xFF2E1500),
+        tertiaryFixedDim = Color(0xFFEFBC94),
+        onTertiaryFixedVariant = Color(0xFF623F20),
+        surfaceDim = Color(0xFFE6D6D9),
+        surfaceBright = Color(0xFFFFF8F8),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFFFF0F2),
+        surfaceContainer = Color(0xFFFAEAED),
+        surfaceContainerHigh = Color(0xFFF4E4E7),
+        surfaceContainerHighest = Color(0xFFEFDFE2),
+    )
+
+    val CarlottaDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFFFB0CA),
+        onPrimary = Color(0xFF541D33),
+        primaryContainer = Color(0xFF6F334A),
+        onPrimaryContainer = Color(0xFFFFD9E3),
+        secondary = Color(0xFFE2BDC7),
+        onSecondary = Color(0xFF422931),
+        secondaryContainer = Color(0xFF5A3F48),
+        onSecondaryContainer = Color(0xFFFFD9E3),
+        tertiary = Color(0xFFEFBC94),
+        onTertiary = Color(0xFF48290C),
+        tertiaryContainer = Color(0xFF623F20),
+        onTertiaryContainer = Color(0xFFFFDCC2),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF191114),
+        onBackground = Color(0xFFEFDFE2),
+        surface = Color(0xFF191114),
+        onSurface = Color(0xFFEFDFE2),
+        surfaceVariant = Color(0xFF514347),
+        onSurfaceVariant = Color(0xFFD5C2C6),
+        outline = Color(0xFF9E8C90),
+        outlineVariant = Color(0xFF514347),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFEFDFE2),
+        inverseOnSurface = Color(0xFF372E30),
+        inversePrimary = Color(0xFF8B4A62),
+        primaryFixed = Color(0xFFFFD9E3),
+        onPrimaryFixed = Color(0xFF39071E),
+        primaryFixedDim = Color(0xFFFFB0CA),
+        onPrimaryFixedVariant = Color(0xFF6F334A),
+        secondaryFixed = Color(0xFFFFD9E3),
+        onSecondaryFixed = Color(0xFF2B151D),
+        secondaryFixedDim = Color(0xFFE2BDC7),
+        onSecondaryFixedVariant = Color(0xFF5A3F48),
+        tertiaryFixed = Color(0xFFFFDCC2),
+        onTertiaryFixed = Color(0xFF2E1500),
+        tertiaryFixedDim = Color(0xFFEFBC94),
+        onTertiaryFixedVariant = Color(0xFF623F20),
+        surfaceDim = Color(0xFF191114),
+        surfaceBright = Color(0xFF403739),
+        surfaceContainerLowest = Color(0xFF140C0E),
+        surfaceContainerLow = Color(0xFF22191C),
+        surfaceContainer = Color(0xFF261D20),
+        surfaceContainerHigh = Color(0xFF31282A),
+        surfaceContainerHighest = Color(0xFF3C3235),
+    )
+
+    val KoharuLightColorScheme = lightColorScheme(
+        primary = Color(0xFF8F4A4D),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFFFFDADA),
+        onPrimaryContainer = Color(0xFF3B080E),
+        secondary = Color(0xFF765657),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFFFDADA),
+        onSecondaryContainer = Color(0xFF2C1516),
+        tertiary = Color(0xFF755A2F),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFFFFDDB0),
+        onTertiaryContainer = Color(0xFF291800),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFFFF8F7),
+        onBackground = Color(0xFF221919),
+        surface = Color(0xFFFFF8F7),
+        onSurface = Color(0xFF221919),
+        surfaceVariant = Color(0xFFF4DDDD),
+        onSurfaceVariant = Color(0xFF524343),
+        outline = Color(0xFF857373),
+        outlineVariant = Color(0xFFD7C1C1),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF382E2E),
+        inverseOnSurface = Color(0xFFFFEDEC),
+        inversePrimary = Color(0xFFFFB3B4),
+        primaryFixed = Color(0xFFFFDADA),
+        onPrimaryFixed = Color(0xFF3B080E),
+        primaryFixedDim = Color(0xFFFFB3B4),
+        onPrimaryFixedVariant = Color(0xFF733337),
+        secondaryFixed = Color(0xFFFFDADA),
+        onSecondaryFixed = Color(0xFF2C1516),
+        secondaryFixedDim = Color(0xFFE6BDBD),
+        onSecondaryFixedVariant = Color(0xFF5D3F40),
+        tertiaryFixed = Color(0xFFFFDDB0),
+        onTertiaryFixed = Color(0xFF291800),
+        tertiaryFixedDim = Color(0xFFE6C18D),
+        onTertiaryFixedVariant = Color(0xFF5B421A),
+        surfaceDim = Color(0xFFE8D6D6),
+        surfaceBright = Color(0xFFFFF8F7),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFFFF0F0),
+        surfaceContainer = Color(0xFFFCEAE9),
+        surfaceContainerHigh = Color(0xFFF6E4E4),
+        surfaceContainerHighest = Color(0xFFF0DEDE),
+    )
+
+    val KoharuDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFFFB3B4),
+        onPrimary = Color(0xFF561D22),
+        primaryContainer = Color(0xFF733337),
+        onPrimaryContainer = Color(0xFFFFDADA),
+        secondary = Color(0xFFE6BDBD),
+        onSecondary = Color(0xFF44292A),
+        secondaryContainer = Color(0xFF5D3F40),
+        onSecondaryContainer = Color(0xFFFFDADA),
+        tertiary = Color(0xFFE6C18D),
+        onTertiary = Color(0xFF422C05),
+        tertiaryContainer = Color(0xFF5B421A),
+        onTertiaryContainer = Color(0xFFFFDDB0),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF1A1111),
+        onBackground = Color(0xFFF0DEDE),
+        surface = Color(0xFF1A1111),
+        onSurface = Color(0xFFF0DEDE),
+        surfaceVariant = Color(0xFF524343),
+        onSurfaceVariant = Color(0xFFD7C1C1),
+        outline = Color(0xFF9F8C8C),
+        outlineVariant = Color(0xFF524343),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFF0DEDE),
+        inverseOnSurface = Color(0xFF382E2E),
+        inversePrimary = Color(0xFF8F4A4D),
+        primaryFixed = Color(0xFFFFDADA),
+        onPrimaryFixed = Color(0xFF3B080E),
+        primaryFixedDim = Color(0xFFFFB3B4),
+        onPrimaryFixedVariant = Color(0xFF733337),
+        secondaryFixed = Color(0xFFFFDADA),
+        onSecondaryFixed = Color(0xFF2C1516),
+        secondaryFixedDim = Color(0xFFE6BDBD),
+        onSecondaryFixedVariant = Color(0xFF5D3F40),
+        tertiaryFixed = Color(0xFFFFDDB0),
+        onTertiaryFixed = Color(0xFF291800),
+        tertiaryFixedDim = Color(0xFFE6C18D),
+        onTertiaryFixedVariant = Color(0xFF5B421A),
+        surfaceDim = Color(0xFF1A1111),
+        surfaceBright = Color(0xFF413737),
+        surfaceContainerLowest = Color(0xFF140C0C),
+        surfaceContainerLow = Color(0xFF221919),
+        surfaceContainer = Color(0xFF271D1D),
+        surfaceContainerHigh = Color(0xFF322828),
+        surfaceContainerHighest = Color(0xFF3D3232),
+    )
+
+    val YuukaLightColorScheme = lightColorScheme(
+        primary = Color(0xFF565992),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFFE0E0FF),
+        onPrimaryContainer = Color(0xFF3E4278),
+        secondary = Color(0xFF5C5D72),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFE1E0F9),
+        onSecondaryContainer = Color(0xFF444559),
+        tertiary = Color(0xFF78536B),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFFFFD8EE),
+        onTertiaryContainer = Color(0xFF5E3C52),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFFBF8FF),
+        onBackground = Color(0xFF1B1B21),
+        surface = Color(0xFFFBF8FF),
+        onSurface = Color(0xFF1B1B21),
+        surfaceVariant = Color(0xFFE4E1EC),
+        onSurfaceVariant = Color(0xFF46464F),
+        outline = Color(0xFF777680),
+        outlineVariant = Color(0xFFC7C5D0),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF303036),
+        inverseOnSurface = Color(0xFFF2EFF7),
+        inversePrimary = Color(0xFFBFC2FF),
+        primaryFixed = Color(0xFFE0E0FF),
+        onPrimaryFixed = Color(0xFF11144B),
+        primaryFixedDim = Color(0xFFBFC2FF),
+        onPrimaryFixedVariant = Color(0xFF3E4278),
+        secondaryFixed = Color(0xFFE1E0F9),
+        onSecondaryFixed = Color(0xFF191A2C),
+        secondaryFixedDim = Color(0xFFC5C4DD),
+        onSecondaryFixedVariant = Color(0xFF444559),
+        tertiaryFixed = Color(0xFFFFD8EE),
+        onTertiaryFixed = Color(0xFF2E1126),
+        tertiaryFixedDim = Color(0xFFE8B9D5),
+        onTertiaryFixedVariant = Color(0xFF5E3C52),
+        surfaceDim = Color(0xFFDBD9E0),
+        surfaceBright = Color(0xFFFBF8FF),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFF5F2FA),
+        surfaceContainer = Color(0xFFF0ECF4),
+        surfaceContainerHigh = Color(0xFFEAE7EF),
+        surfaceContainerHighest = Color(0xFFE4E1E9),
+    )
+
+    val YuukaDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFBFC2FF),
+        onPrimary = Color(0xFF272B60),
+        primaryContainer = Color(0xFF3E4278),
+        onPrimaryContainer = Color(0xFFE0E0FF),
+        secondary = Color(0xFFC5C4DD),
+        onSecondary = Color(0xFF2E2F42),
+        secondaryContainer = Color(0xFF444559),
+        onSecondaryContainer = Color(0xFFE1E0F9),
+        tertiary = Color(0xFFE8B9D5),
+        onTertiary = Color(0xFF46263B),
+        tertiaryContainer = Color(0xFF5E3C52),
+        onTertiaryContainer = Color(0xFFFFD8EE),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF131318),
+        onBackground = Color(0xFFE4E1E9),
+        surface = Color(0xFF131318),
+        onSurface = Color(0xFFE4E1E9),
+        surfaceVariant = Color(0xFF46464F),
+        onSurfaceVariant = Color(0xFFC7C5D0),
+        outline = Color(0xFF918F9A),
+        outlineVariant = Color(0xFF46464F),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFE4E1E9),
+        inverseOnSurface = Color(0xFF303036),
+        inversePrimary = Color(0xFF565992),
+        primaryFixed = Color(0xFFE0E0FF),
+        onPrimaryFixed = Color(0xFF11144B),
+        primaryFixedDim = Color(0xFFBFC2FF),
+        onPrimaryFixedVariant = Color(0xFF3E4278),
+        secondaryFixed = Color(0xFFE1E0F9),
+        onSecondaryFixed = Color(0xFF191A2C),
+        secondaryFixedDim = Color(0xFFC5C4DD),
+        onSecondaryFixedVariant = Color(0xFF444559),
+        tertiaryFixed = Color(0xFFFFD8EE),
+        onTertiaryFixed = Color(0xFF2E1126),
+        tertiaryFixedDim = Color(0xFFE8B9D5),
+        onTertiaryFixedVariant = Color(0xFF5E3C52),
+        surfaceDim = Color(0xFF131318),
+        surfaceBright = Color(0xFF39393F),
+        surfaceContainerLowest = Color(0xFF0E0E13),
+        surfaceContainerLow = Color(0xFF1B1B21),
+        surfaceContainer = Color(0xFF1F1F25),
+        surfaceContainerHigh = Color(0xFF2A292F),
+        surfaceContainerHighest = Color(0xFF34343A),
+    )
+
+    val PhoebeLightColorScheme = lightColorScheme(
+        primary = Color(0xFF6B5E10),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFFF6E388),
+        onPrimaryContainer = Color(0xFF524700),
+        secondary = Color(0xFF475D92),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFD9E2FF),
+        onSecondaryContainer = Color(0xFF2F4578),
+        tertiary = Color(0xFF01677D),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFFB3EBFF),
+        onTertiaryContainer = Color(0xFF004E5F),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFFFF9EC),
+        onBackground = Color(0xFF1E1C13),
+        surface = Color(0xFFFFF9EC),
+        onSurface = Color(0xFF1E1C13),
+        surfaceVariant = Color(0xFFE9E2D0),
+        onSurfaceVariant = Color(0xFF4A4739),
+        outline = Color(0xFF7C7768),
+        outlineVariant = Color(0xFFCCC6B4),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF333027),
+        inverseOnSurface = Color(0xFFF6F0E2),
+        inversePrimary = Color(0xFFD9C76F),
+        primaryFixed = Color(0xFFF6E388),
+        onPrimaryFixed = Color(0xFF211B00),
+        primaryFixedDim = Color(0xFFD9C76F),
+        onPrimaryFixedVariant = Color(0xFF524700),
+        secondaryFixed = Color(0xFFD9E2FF),
+        onSecondaryFixed = Color(0xFF001946),
+        secondaryFixedDim = Color(0xFFB1C5FF),
+        onSecondaryFixedVariant = Color(0xFF2F4578),
+        tertiaryFixed = Color(0xFFB3EBFF),
+        onTertiaryFixed = Color(0xFF001F27),
+        tertiaryFixedDim = Color(0xFF86D1EA),
+        onTertiaryFixedVariant = Color(0xFF004E5F),
+        surfaceDim = Color(0xFFDFDACC),
+        surfaceBright = Color(0xFFFFF9EC),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFF9F3E5),
+        surfaceContainer = Color(0xFFF4EDDF),
+        surfaceContainerHigh = Color(0xFFEEE8DA),
+        surfaceContainerHighest = Color(0xFFE8E2D4),
+    )
+
+    val PhoebeDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFD9C76F),
+        onPrimary = Color(0xFF383000),
+        primaryContainer = Color(0xFF524700),
+        onPrimaryContainer = Color(0xFFF6E388),
+        secondary = Color(0xFFB1C5FF),
+        onSecondary = Color(0xFF162E60),
+        secondaryContainer = Color(0xFF2F4578),
+        onSecondaryContainer = Color(0xFFD9E2FF),
+        tertiary = Color(0xFF86D1EA),
+        onTertiary = Color(0xFF003642),
+        tertiaryContainer = Color(0xFF004E5F),
+        onTertiaryContainer = Color(0xFFB3EBFF),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF15130C),
+        onBackground = Color(0xFFE8E2D4),
+        surface = Color(0xFF15130C),
+        onSurface = Color(0xFFE8E2D4),
+        surfaceVariant = Color(0xFF4A4739),
+        onSurfaceVariant = Color(0xFFCCC6B4),
+        outline = Color(0xFF969180),
+        outlineVariant = Color(0xFF4A4739),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFE8E2D4),
+        inverseOnSurface = Color(0xFF333027),
+        inversePrimary = Color(0xFF6B5E10),
+        primaryFixed = Color(0xFFF6E388),
+        onPrimaryFixed = Color(0xFF211B00),
+        primaryFixedDim = Color(0xFFD9C76F),
+        onPrimaryFixedVariant = Color(0xFF524700),
+        secondaryFixed = Color(0xFFD9E2FF),
+        onSecondaryFixed = Color(0xFF001946),
+        secondaryFixedDim = Color(0xFFB1C5FF),
+        onSecondaryFixedVariant = Color(0xFF2F4578),
+        tertiaryFixed = Color(0xFFB3EBFF),
+        onTertiaryFixed = Color(0xFF001F27),
+        tertiaryFixedDim = Color(0xFF86D1EA),
+        onTertiaryFixedVariant = Color(0xFF004E5F),
+        surfaceDim = Color(0xFF15130C),
+        surfaceBright = Color(0xFF3C3930),
+        surfaceContainerLowest = Color(0xFF100E07),
+        surfaceContainerLow = Color(0xFF1E1C13),
+        surfaceContainer = Color(0xFF222017),
+        surfaceContainerHigh = Color(0xFF2C2A21),
+        surfaceContainerHighest = Color(0xFF37352B),
+    )
+
+    val MujikaLightColorScheme = lightColorScheme(
+        primary = Color(0xFF8E4958),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xFFFFD9DF),
+        onPrimaryContainer = Color(0xFF713341),
+        secondary = Color(0xFF75565C),
+        onSecondary = Color(0xFFFFFFFF),
+        secondaryContainer = Color(0xFFFFD9DF),
+        onSecondaryContainer = Color(0xFF5C3F44),
+        tertiary = Color(0xFF4D5C92),
+        onTertiary = Color(0xFFFFFFFF),
+        tertiaryContainer = Color(0xFFDCE1FF),
+        onTertiaryContainer = Color(0xFF354479),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0xFFFFF8F7),
+        onBackground = Color(0xFF22191B),
+        surface = Color(0xFFFFF8F7),
+        onSurface = Color(0xFF22191B),
+        surfaceVariant = Color(0xFFF3DDE0),
+        onSurfaceVariant = Color(0xFF524345),
+        outline = Color(0xFF847375),
+        outlineVariant = Color(0xFFD6C2C4),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFF382E2F),
+        inverseOnSurface = Color(0xFFFEEDEE),
+        inversePrimary = Color(0xFFFFB1C0),
+        primaryFixed = Color(0xFFFFD9DF),
+        onPrimaryFixed = Color(0xFF3A0717),
+        primaryFixedDim = Color(0xFFFFB1C0),
+        onPrimaryFixedVariant = Color(0xFF713341),
+        secondaryFixed = Color(0xFFFFD9DF),
+        onSecondaryFixed = Color(0xFF2B151A),
+        secondaryFixedDim = Color(0xFFE4BDC3),
+        onSecondaryFixedVariant = Color(0xFF5C3F44),
+        tertiaryFixed = Color(0xFFDCE1FF),
+        onTertiaryFixed = Color(0xFF04174B),
+        tertiaryFixedDim = Color(0xFFB6C4FF),
+        onTertiaryFixedVariant = Color(0xFF354479),
+        surfaceDim = Color(0xFFE7D6D8),
+        surfaceBright = Color(0xFFFFF8F7),
+        surfaceContainerLowest = Color(0xFFFFFFFF),
+        surfaceContainerLow = Color(0xFFFFF0F1),
+        surfaceContainer = Color(0xFFFBEAEB),
+        surfaceContainerHigh = Color(0xFFF5E4E6),
+        surfaceContainerHighest = Color(0xFFEFDEE0),
+    )
+
+    val MujikaDarkColorScheme = darkColorScheme(
+        primary = Color(0xFFFFB1C0),
+        onPrimary = Color(0xFF551D2B),
+        primaryContainer = Color(0xFF713341),
+        onPrimaryContainer = Color(0xFFFFD9DF),
+        secondary = Color(0xFFE4BDC3),
+        onSecondary = Color(0xFF43292E),
+        secondaryContainer = Color(0xFF5C3F44),
+        onSecondaryContainer = Color(0xFFFFD9DF),
+        tertiary = Color(0xFFB6C4FF),
+        onTertiary = Color(0xFF1D2D61),
+        tertiaryContainer = Color(0xFF354479),
+        onTertiaryContainer = Color(0xFFDCE1FF),
+        error = Color(0xFFFFB4AB),
+        onError = Color(0xFF690005),
+        errorContainer = Color(0xFF93000A),
+        onErrorContainer = Color(0xFFFFDAD6),
+        background = Color(0xFF191113),
+        onBackground = Color(0xFFEFDEE0),
+        surface = Color(0xFF191113),
+        onSurface = Color(0xFFEFDEE0),
+        surfaceVariant = Color(0xFF524345),
+        onSurfaceVariant = Color(0xFFD6C2C4),
+        outline = Color(0xFF9F8C8F),
+        outlineVariant = Color(0xFF524345),
+        scrim = Color(0xFF000000),
+        inverseSurface = Color(0xFFEFDEE0),
+        inverseOnSurface = Color(0xFF382E2F),
+        inversePrimary = Color(0xFF8E4958),
+        primaryFixed = Color(0xFFFFD9DF),
+        onPrimaryFixed = Color(0xFF3A0717),
+        primaryFixedDim = Color(0xFFFFB1C0),
+        onPrimaryFixedVariant = Color(0xFF713341),
+        secondaryFixed = Color(0xFFFFD9DF),
+        onSecondaryFixed = Color(0xFF2B151A),
+        secondaryFixedDim = Color(0xFFE4BDC3),
+        onSecondaryFixedVariant = Color(0xFF5C3F44),
+        tertiaryFixed = Color(0xFFDCE1FF),
+        onTertiaryFixed = Color(0xFF04174B),
+        tertiaryFixedDim = Color(0xFFB6C4FF),
+        onTertiaryFixedVariant = Color(0xFF354479),
+        surfaceDim = Color(0xFF191113),
+        surfaceBright = Color(0xFF413738),
+        surfaceContainerLowest = Color(0xFF140C0D),
+        surfaceContainerLow = Color(0xFF22191B),
+        surfaceContainer = Color(0xFF261D1F),
+        surfaceContainerHigh = Color(0xFF312829),
+        surfaceContainerHighest = Color(0xFF3C3234),
+    )
+
+    val TransparentLightColorScheme = lightColorScheme(
+        primary = Color(0xFF000000),
+        onPrimary = Color(0xFFFFFFFF),
+        primaryContainer = Color(0xB0FFFFFF),
+        onPrimaryContainer = Color(0xFF000000),
+        secondary = Color(0xFF000000),
+        onSecondary = Color(0xB0FFFFFF),
+        secondaryContainer = Color(0xB0FFFFFF),
+        onSecondaryContainer = Color(0xFF000000),
+        tertiary = Color(0xFF000000),
+        onTertiary = Color(0xFF000000),
+        tertiaryContainer = Color(0xB0FFFFFF),
+        onTertiaryContainer = Color(0xFF000000),
+        error = Color(0xFFBA1A1A),
+        onError = Color(0xFFFFFFFF),
+        errorContainer = Color(0xFFFFDAD6),
+        onErrorContainer = Color(0xFF93000A),
+        background = Color(0x00FFFFFF),
+        onBackground = Color(0xFF1E1C13),
+        surface = Color(0x00FFFFFF),
+        onSurface = Color(0xFF1E1C13),
+        surfaceVariant = Color(0x1A000000),
+        onSurfaceVariant = Color(0x80000000),
+        outline = Color(0xFF7C7768),
+        outlineVariant = Color(0xFFCCC6B4),
+        scrim = Color(0x33000000),
+        inverseSurface = Color(0xFF333027),
+        inverseOnSurface = Color(0xFFF6F0E2),
+        inversePrimary = Color(0xA0FFFFFF),
+        // Material 3.1+ Fixed Colors
+        primaryFixed = Color(0xA0FFFFFF),
+        onPrimaryFixed = Color(0xFF211B00),
+        primaryFixedDim = Color(0xB0FFFFFF),
+        onPrimaryFixedVariant = Color(0xB0FFFFFF),
+        secondaryFixed = Color(0xB0FFFFFF),
+        onSecondaryFixed = Color(0xFF000000),
+        secondaryFixedDim = Color(0xB0FFFFFF),
+        onSecondaryFixedVariant = Color(0xB0FFFFFF),
+        tertiaryFixed = Color(0xB0FFFFFF),
+        onTertiaryFixed = Color(0xFF000000),
+        tertiaryFixedDim = Color(0xB0FFFFFF),
+        onTertiaryFixedVariant = Color(0xB0FFFFFF),
+        surfaceDim = Color(0x1AFFFFFF),
+        surfaceBright = Color(0x33FFFFFF),
+        surfaceContainerLowest = Color(0x0DFFFFFF),
+        surfaceContainerLow = Color(0x1AFFFFFF),
+        surfaceContainer = Color(0x33FFFFFF),
+        surfaceContainerHigh = Color(0x4DFFFFFF),
+        surfaceContainerHighest = Color(0x66FFFFFF),
+    )
+
+    val TransparentDarkColorScheme = darkColorScheme(
+        primary = Color(0xA0FFFFFF),
+        onPrimary = Color(0xFF000000),
+        primaryContainer = Color(0x80FFFFFF),
+        onPrimaryContainer = Color(0xFF000000),
+        secondary = Color(0x80FFFFFF),
+        onSecondary = Color(0xFF000000),
+        secondaryContainer = Color(0xA0FFFFFF),
+        onSecondaryContainer = Color(0xFF000000),
+        tertiary = Color(0x80FFFFFF),
+        onTertiary = Color(0xFF000000),
+        tertiaryContainer = Color(0x40FFFFFF),
+        onTertiaryContainer = Color(0xFF000000),
+        error = Color(0xFFCF6679),
+        onError = Color(0xFF000000),
+        errorContainer = Color(0xFF8B0000),
+        onErrorContainer = Color(0xFFFFFFFF),
+        background = Color(0x00000000),
+        onBackground = Color(0xFFEDE6FF),
+        surface = Color(0x00FFFFFF),
+        onSurface = Color(0xFFEDE6FF),
+        surfaceVariant = Color(0x40FFFFFF),
+        onSurfaceVariant = Color(0xB3FFFFFF),
+        outline = Color(0x8AFFFFFF),
+        outlineVariant = Color(0x33FFFFFF),
+        scrim = Color(0x66000000),
+        inverseSurface = Color(0xFFFFF9EC),
+        inverseOnSurface = Color(0xFF1E1C13),
+        inversePrimary = Color(0xA0FFFFFF),
+        primaryFixed = Color(0xA0FFFFFF),
+        onPrimaryFixed = Color(0xFF000000),
+        primaryFixedDim = Color(0xA0FFFFFF),
+        onPrimaryFixedVariant = Color(0xA0FFFFFF),
+        secondaryFixed = Color(0xA0FFFFFF),
+        onSecondaryFixed = Color(0xFF000000),
+        secondaryFixedDim = Color(0xA0FFFFFF),
+        onSecondaryFixedVariant = Color(0xA0FFFFFF),
+        tertiaryFixed = Color(0xA0FFFFFF),
+        onTertiaryFixed = Color(0xFF000000),
+        tertiaryFixedDim = Color(0xA0FFFFFF),
+        onTertiaryFixedVariant = Color(0xA0FFFFFF),
+        surfaceDim = Color(0x1AFFFFFF),
+        surfaceBright = Color(0x33FFFFFF),
+        surfaceContainerLowest = Color(0x0DFFFFFF),
+        surfaceContainerLow = Color(0x1AFFFFFF),
+        surfaceContainer = Color(0x33FFFFFF),
+        surfaceContainerHigh = Color(0x4DFFFFFF),
+        surfaceContainerHighest = Color(0x66FFFFFF),
+    )
+}

+ 16 - 0
app/src/main/java/io/legado/app/ui/theme/ThemeState.kt

@@ -0,0 +1,16 @@
+package io.legado.app.ui.theme
+
+import io.legado.app.help.config.AppConfig
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+
+object ThemeState {
+    private val _themeMode =
+        MutableStateFlow(resolveThemeMode(AppConfig.AppTheme.toString()))
+
+    val themeMode: StateFlow<AppThemeMode> = _themeMode
+
+    fun updateThemeMode() {
+        _themeMode.value = resolveThemeMode(AppConfig.AppTheme.toString())
+    }
+}