// SubstratalThemes.kt — generated from shared/themes/themes.json. Defaults: Moss Paper (light) / Forest Floor (dark). package com.substratalapps.hub.ui.theme import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.graphics.Color enum class ThemeMode { LIGHT, DARK, SYSTEM } // Settings.theme enum class LightTheme(val id: String, val displayName: String) { TEAL_LEDGER("teal-ledger", "Teal Ledger"), INDIGO_ROOT("indigo-root", "Indigo Root"), MOSS_PAPER("moss-paper", "Moss Paper"), CORAL_CLAY("coral-clay", "Coral Clay"), SPORE_PINK("spore-pink", "Spore Pink"), ; companion object { val Default = MOSS_PAPER; fun from(id: String?) = entries.firstOrNull { it.id == id } ?: Default } } enum class DarkTheme(val id: String, val displayName: String) { NIGHT_SOIL("night-soil", "Night Soil"), DEEP_TEAL("deep-teal", "Deep Teal"), GRAPHITE_SPORE("graphite-spore", "Graphite Spore"), FOREST_FLOOR("forest-floor", "Forest Floor"), EMBER_CLAY("ember-clay", "Ember Clay"), ; companion object { val Default = FOREST_FLOOR; fun from(id: String?) = entries.firstOrNull { it.id == id } ?: Default } } val TealLedgerScheme = lightColorScheme( primary = Color(0xFF137C7A), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFDDF0EE), onPrimaryContainer = Color(0xFF0E5F5D), secondary = Color(0xFF0E5F5D), onSecondary = Color(0xFFFFFFFF), secondaryContainer = Color(0xFFCFE2E2), onSecondaryContainer = Color(0xFF10272A), tertiary = Color(0xFF0E5F5D), onTertiary = Color(0xFFFFFFFF), tertiaryContainer = Color(0xFFDDF0EE), onTertiaryContainer = Color(0xFF10272A), background = Color(0xFFF3F6F6), onBackground = Color(0xFF10272A), surface = Color(0xFFF3F6F6), onSurface = Color(0xFF10272A), surfaceVariant = Color(0xFFF6F9F9), onSurfaceVariant = Color(0xFF56686A), surfaceTint = Color(0xFF137C7A), inverseSurface = Color(0xFF10272A), inverseOnSurface = Color(0xFFF3F6F6), inversePrimary = Color(0xFF0E5F5D), outline = Color(0xFF8D999A), outlineVariant = Color(0xFFD9E2E2), scrim = Color(0xFF000000), surfaceBright = Color(0xFFFFFFFF), surfaceDim = Color(0xFFE5EAEA), surfaceContainerLowest = Color(0xFFFFFFFF), surfaceContainerLow = Color(0xFFECF0F0), surfaceContainer = Color(0xFFE8ECEC), surfaceContainerHigh = Color(0xFFE1E5E6), surfaceContainerHighest = Color(0xFFDADFE0), ) val IndigoRootScheme = lightColorScheme( primary = Color(0xFF3D3BB8), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFE6E6FA), onPrimaryContainer = Color(0xFF2C2A8F), secondary = Color(0xFF2C2A8F), onSecondary = Color(0xFFFFFFFF), secondaryContainer = Color(0xFFD7D6EF), onSecondaryContainer = Color(0xFF1A1838), tertiary = Color(0xFF2C2A8F), onTertiary = Color(0xFFFFFFFF), tertiaryContainer = Color(0xFFE6E6FA), onTertiaryContainer = Color(0xFF1A1838), background = Color(0xFFF4F4FA), onBackground = Color(0xFF1A1838), surface = Color(0xFFF4F4FA), onSurface = Color(0xFF1A1838), surfaceVariant = Color(0xFFF7F7FC), onSurfaceVariant = Color(0xFF5D5B78), surfaceTint = Color(0xFF3D3BB8), inverseSurface = Color(0xFF1A1838), inverseOnSurface = Color(0xFFF4F4FA), inversePrimary = Color(0xFF2C2A8F), outline = Color(0xFF9291A3), outlineVariant = Color(0xFFDEDEEB), scrim = Color(0xFF000000), surfaceBright = Color(0xFFFFFFFF), surfaceDim = Color(0xFFE7E7EE), surfaceContainerLowest = Color(0xFFFFFFFF), surfaceContainerLow = Color(0xFFEDEDF4), surfaceContainer = Color(0xFFE9E9F0), surfaceContainerHigh = Color(0xFFE3E2EA), surfaceContainerHighest = Color(0xFFDCDCE5), ) val MossPaperScheme = lightColorScheme( primary = Color(0xFF4A7322), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFE6EFD8), onPrimaryContainer = Color(0xFF375719), secondary = Color(0xFF375719), onSecondary = Color(0xFFFFFFFF), secondaryContainer = Color(0xFFDADFCD), onSecondaryContainer = Color(0xFF22261A), tertiary = Color(0xFF375719), onTertiary = Color(0xFFFFFFFF), tertiaryContainer = Color(0xFFE6EFD8), onTertiaryContainer = Color(0xFF22261A), background = Color(0xFFF5F4EE), onBackground = Color(0xFF22261A), surface = Color(0xFFF5F4EE), onSurface = Color(0xFF22261A), surfaceVariant = Color(0xFFF9F8F3), onSurfaceVariant = Color(0xFF5F6455), surfaceTint = Color(0xFF4A7322), inverseSurface = Color(0xFF22261A), inverseOnSurface = Color(0xFFF5F4EE), inversePrimary = Color(0xFF375719), outline = Color(0xFF96978F), outlineVariant = Color(0xFFE1DFD2), scrim = Color(0xFF000000), surfaceBright = Color(0xFFFFFFFE), surfaceDim = Color(0xFFE8E8E1), surfaceContainerLowest = Color(0xFFFFFFFE), surfaceContainerLow = Color(0xFFEFEEE8), surfaceContainer = Color(0xFFEAEAE3), surfaceContainerHigh = Color(0xFFE4E4DD), surfaceContainerHighest = Color(0xFFDEDDD7), ) val CoralClayScheme = lightColorScheme( primary = Color(0xFFB44529), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFF7E3DB), onPrimaryContainer = Color(0xFF90361F), secondary = Color(0xFF90361F), onSecondary = Color(0xFFFFFFFF), secondaryContainer = Color(0xFFEED9D2), onSecondaryContainer = Color(0xFF2A1D17), tertiary = Color(0xFF90361F), onTertiary = Color(0xFFFFFFFF), tertiaryContainer = Color(0xFFF7E3DB), onTertiaryContainer = Color(0xFF2A1D17), background = Color(0xFFF9F5F2), onBackground = Color(0xFF2A1D17), surface = Color(0xFFF9F5F2), onSurface = Color(0xFF2A1D17), surfaceVariant = Color(0xFFFBF8F6), onSurfaceVariant = Color(0xFF6E5D55), surfaceTint = Color(0xFFB44529), inverseSurface = Color(0xFF2A1D17), inverseOnSurface = Color(0xFFF9F5F2), inversePrimary = Color(0xFF90361F), outline = Color(0xFF9C948F), outlineVariant = Color(0xFFEAE0D8), scrim = Color(0xFF000000), surfaceBright = Color(0xFFFFFFFF), surfaceDim = Color(0xFFEDE8E5), surfaceContainerLowest = Color(0xFFFFFFFF), surfaceContainerLow = Color(0xFFF3EFEB), surfaceContainer = Color(0xFFEFEAE7), surfaceContainerHigh = Color(0xFFE8E4E0), surfaceContainerHighest = Color(0xFFE2DDDA), ) val SporePinkScheme = lightColorScheme( primary = Color(0xFFB3285B), onPrimary = Color(0xFFFFFFFF), primaryContainer = Color(0xFFF7E0E9), onPrimaryContainer = Color(0xFF8F1F48), secondary = Color(0xFF8F1F48), onSecondary = Color(0xFFFFFFFF), secondaryContainer = Color(0xFFEED5DF), onSecondaryContainer = Color(0xFF2A1622), tertiary = Color(0xFF8F1F48), onTertiary = Color(0xFFFFFFFF), tertiaryContainer = Color(0xFFF7E0E9), onTertiaryContainer = Color(0xFF2A1622), background = Color(0xFFF9F6F8), onBackground = Color(0xFF2A1622), surface = Color(0xFFF9F6F8), onSurface = Color(0xFF2A1622), surfaceVariant = Color(0xFFFBF8FA), onSurfaceVariant = Color(0xFF6E5A66), surfaceTint = Color(0xFFB3285B), inverseSurface = Color(0xFF2A1622), inverseOnSurface = Color(0xFFF9F6F8), inversePrimary = Color(0xFF8F1F48), outline = Color(0xFF9C9198), outlineVariant = Color(0xFFEADFE5), scrim = Color(0xFF000000), surfaceBright = Color(0xFFFFFFFF), surfaceDim = Color(0xFFEDE9EB), surfaceContainerLowest = Color(0xFFFFFFFF), surfaceContainerLow = Color(0xFFF3EFF2), surfaceContainer = Color(0xFFEFEBED), surfaceContainerHigh = Color(0xFFE8E4E7), surfaceContainerHighest = Color(0xFFE2DDE0), ) val NightSoilScheme = darkColorScheme( primary = Color(0xFF8E8CFF), onPrimary = Color(0xFF15132E), primaryContainer = Color(0xFF2C2A63), onPrimaryContainer = Color(0xFFB4B3FF), secondary = Color(0xFFB4B3FF), onSecondary = Color(0xFF15132E), secondaryContainer = Color(0xFF28264F), onSecondaryContainer = Color(0xFFECEBFA), tertiary = Color(0xFFB4B3FF), onTertiary = Color(0xFF15132E), tertiaryContainer = Color(0xFF2C2A63), onTertiaryContainer = Color(0xFFECEBFA), background = Color(0xFF15132E), onBackground = Color(0xFFECEBFA), surface = Color(0xFF15132E), onSurface = Color(0xFFECEBFA), surfaceVariant = Color(0xFF211F42), onSurfaceVariant = Color(0xFFA6A4C8), surfaceTint = Color(0xFF8E8CFF), inverseSurface = Color(0xFFECEBFA), inverseOnSurface = Color(0xFF15132E), inversePrimary = Color(0xFFB4B3FF), outline = Color(0xFF76748A), outlineVariant = Color(0xFF34325C), scrim = Color(0xFF000000), surfaceBright = Color(0xFF2F2D46), surfaceDim = Color(0xFF15132E), surfaceContainerLowest = Color(0xFF0F0D20), surfaceContainerLow = Color(0xFF1B1934), surfaceContainer = Color(0xFF201E38), surfaceContainerHigh = Color(0xFF26243E), surfaceContainerHighest = Color(0xFF2D2B44), ) val DeepTealScheme = darkColorScheme( primary = Color(0xFF55CFC9), onPrimary = Color(0xFF062423), primaryContainer = Color(0xFF133C3B), onPrimaryContainer = Color(0xFF8BE3DE), secondary = Color(0xFF8BE3DE), onSecondary = Color(0xFF062423), secondaryContainer = Color(0xFF193535), onSecondaryContainer = Color(0xFFE3F1F0), tertiary = Color(0xFF8BE3DE), onTertiary = Color(0xFF062423), tertiaryContainer = Color(0xFF133C3B), onTertiaryContainer = Color(0xFFE3F1F0), background = Color(0xFF0D1819), onBackground = Color(0xFFE3F1F0), surface = Color(0xFF0D1819), onSurface = Color(0xFFE3F1F0), surfaceVariant = Color(0xFF162729), onSurfaceVariant = Color(0xFF93ADAC), surfaceTint = Color(0xFF55CFC9), inverseSurface = Color(0xFFE3F1F0), inverseOnSurface = Color(0xFF0D1819), inversePrimary = Color(0xFF8BE3DE), outline = Color(0xFF6D7A7A), outlineVariant = Color(0xFF26403F), scrim = Color(0xFF000000), surfaceBright = Color(0xFF273233), surfaceDim = Color(0xFF0D1819), surfaceContainerLowest = Color(0xFF091112), surfaceContainerLow = Color(0xFF131F1F), surfaceContainer = Color(0xFF182324), surfaceContainerHigh = Color(0xFF1E292A), surfaceContainerHighest = Color(0xFF253031), ) val GraphiteSporeScheme = darkColorScheme( primary = Color(0xFFFF86AE), onPrimary = Color(0xFF3A0A1E), primaryContainer = Color(0xFF3E2030), onPrimaryContainer = Color(0xFFFFB0CA), secondary = Color(0xFFFFB0CA), onSecondary = Color(0xFF3A0A1E), secondaryContainer = Color(0xFF3B2830), onSecondaryContainer = Color(0xFFF1EFF1), tertiary = Color(0xFFFFB0CA), onTertiary = Color(0xFF3A0A1E), tertiaryContainer = Color(0xFF3E2030), onTertiaryContainer = Color(0xFFF1EFF1), background = Color(0xFF161618), onBackground = Color(0xFFF1EFF1), surface = Color(0xFF161618), onSurface = Color(0xFFF1EFF1), surfaceVariant = Color(0xFF222226), onSurfaceVariant = Color(0xFFA3A0A7), surfaceTint = Color(0xFFFF86AE), inverseSurface = Color(0xFFF1EFF1), inverseOnSurface = Color(0xFF161618), inversePrimary = Color(0xFFFFB0CA), outline = Color(0xFF79787A), outlineVariant = Color(0xFF34343A), scrim = Color(0xFF000000), surfaceBright = Color(0xFF303032), surfaceDim = Color(0xFF161618), surfaceContainerLowest = Color(0xFF0F0F11), surfaceContainerLow = Color(0xFF1D1D1F), surfaceContainer = Color(0xFF212123), surfaceContainerHigh = Color(0xFF282729), surfaceContainerHighest = Color(0xFF2E2E30), ) val ForestFloorScheme = darkColorScheme( primary = Color(0xFFB8E26A), onPrimary = Color(0xFF1A2608), primaryContainer = Color(0xFF2C3B19), onPrimaryContainer = Color(0xFFD3F09A), secondary = Color(0xFFD3F09A), onSecondary = Color(0xFF1A2608), secondaryContainer = Color(0xFF2B361E), onSecondaryContainer = Color(0xFFE8EFE2), tertiary = Color(0xFFD3F09A), onTertiary = Color(0xFF1A2608), tertiaryContainer = Color(0xFF2C3B19), onTertiaryContainer = Color(0xFFE8EFE2), background = Color(0xFF10150F), onBackground = Color(0xFFE8EFE2), surface = Color(0xFF10150F), onSurface = Color(0xFFE8EFE2), surfaceVariant = Color(0xFF1A2219), onSurfaceVariant = Color(0xFF9DAA95), surfaceTint = Color(0xFFB8E26A), inverseSurface = Color(0xFFE8EFE2), inverseOnSurface = Color(0xFF10150F), inversePrimary = Color(0xFFD3F09A), outline = Color(0xFF71776E), outlineVariant = Color(0xFF2C3929), scrim = Color(0xFF000000), surfaceBright = Color(0xFF2A2F28), surfaceDim = Color(0xFF10150F), surfaceContainerLowest = Color(0xFF0B0F0A), surfaceContainerLow = Color(0xFF161C15), surfaceContainer = Color(0xFF1B201A), surfaceContainerHigh = Color(0xFF212620), surfaceContainerHighest = Color(0xFF282D26), ) val EmberClayScheme = darkColorScheme( primary = Color(0xFFFF9A80), onPrimary = Color(0xFF3D1206), primaryContainer = Color(0xFF44261D), onPrimaryContainer = Color(0xFFFFBCA9), secondary = Color(0xFFFFBCA9), onSecondary = Color(0xFF3D1206), secondaryContainer = Color(0xFF3E2924), onSecondaryContainer = Color(0xFFF4ECE8), tertiary = Color(0xFFFFBCA9), onTertiary = Color(0xFF3D1206), tertiaryContainer = Color(0xFF44261D), onTertiaryContainer = Color(0xFFF4ECE8), background = Color(0xFF191412), onBackground = Color(0xFFF4ECE8), surface = Color(0xFF191412), onSurface = Color(0xFFF4ECE8), surfaceVariant = Color(0xFF261E1A), onSurfaceVariant = Color(0xFFB3A39B), surfaceTint = Color(0xFFFF9A80), inverseSurface = Color(0xFFF4ECE8), inverseOnSurface = Color(0xFF191412), inversePrimary = Color(0xFFFFBCA9), outline = Color(0xFF7C7572), outlineVariant = Color(0xFF3B302B), scrim = Color(0xFF000000), surfaceBright = Color(0xFF332E2C), surfaceDim = Color(0xFF191412), surfaceContainerLowest = Color(0xFF120E0D), surfaceContainerLow = Color(0xFF201A18), surfaceContainer = Color(0xFF241F1D), surfaceContainerHigh = Color(0xFF2B2523), surfaceContainerHighest = Color(0xFF312C2A), ) val LightTheme.scheme: ColorScheme get() = when (this) { LightTheme.TEAL_LEDGER -> TealLedgerScheme LightTheme.INDIGO_ROOT -> IndigoRootScheme LightTheme.MOSS_PAPER -> MossPaperScheme LightTheme.CORAL_CLAY -> CoralClayScheme LightTheme.SPORE_PINK -> SporePinkScheme } val DarkTheme.scheme: ColorScheme get() = when (this) { DarkTheme.NIGHT_SOIL -> NightSoilScheme DarkTheme.DEEP_TEAL -> DeepTealScheme DarkTheme.GRAPHITE_SPORE -> GraphiteSporeScheme DarkTheme.FOREST_FLOOR -> ForestFloorScheme DarkTheme.EMBER_CLAY -> EmberClayScheme } /** Wrap the app. Dynamic (wallpaper) colour is off: Substratal themes are the product palette. */ @Composable fun SubstratalTheme(mode: ThemeMode, light: LightTheme, dark: DarkTheme, content: @Composable () -> Unit) { val isDark = when (mode) { ThemeMode.LIGHT -> false; ThemeMode.DARK -> true; ThemeMode.SYSTEM -> isSystemInDarkTheme() } MaterialTheme(colorScheme = if (isDark) dark.scheme else light.scheme, content = content) }