Zum Hauptinhalt springen

Designsystem

Farbpalette​

Die Trainium-Palette ist auf ui/theme/Color.kt eingestellt. Es folgt einer dunklen, monochromen Ästhetik mit elektrischem Blau als Akzentfarbe.

Grundtöne (themenunabhängig)​

TokenHEX-WertHauptverwendung
BlueDark#0B1426Dunkler Themenhintergrund
BlueMid#121F3DDunkle Themenoberfläche
BlueDeep#162347Dunkle Themenvariantenoberfläche
BlueAccent#2196F3Primärfarbe von Aktionen (Schaltflächen, aktive Rahmen)
BlueElectric#448AFFCTA-Buttons mit Farbverlauf
BlueSoft#64B5F6Sekundärtexte und Untertitel im dunklen Thema
BlueGlow#332196F3Glüh- und Schatteneffekte mit Transparenz
BlueLight#BBDEFBWeiche Hintergründe im hellen Design
WhiteSoft#F0F4FFHeller Themenhintergrund

Dunkles Farbschema​

Rollenmaterial 3TokenTapferkeit HEX
primaryDarkPrimary#448AFF
onPrimaryDarkOnPrimary#001E5F
primaryContainerDarkPrimaryContainer#1A3A6E
backgroundDarkBackground#0B1426
surfaceDarkSurface#121F3D
surfaceVariantDarkSurfaceVariant#1A2D54
errorDarkError#FF6B6B

Helles Farbschema​

Rollenmaterial 3TokenTapferkeit HEX
primaryLightPrimary#1565C0
onPrimaryLightOnPrimary#FFFFFF
primaryContainerLightPrimaryContainer#D0E4FF
backgroundLightBackground#F0F4FF
surfaceLightSurface#FFFFFF
surfaceVariantLightSurfaceVariant#E3ECFA
errorLightError#D32F2F

Typografie​

Die Schriftartskala ist auf ui/theme/Type.kt eingestellt und verwendet FontFamily.SansSerif (die standardmäßige serifenlose Schriftart des Android-Systems, normalerweise Roboto) für alle Ebenen.

NivelGewichtTamañoInterletraje
displayLargeSchwarz (900)34 sp-0,25 sp
headlineLargeFett (700)28 sp0 sp
headlineMediumFett (700)24 sp0 sp
titleLargeHalbfett (600)20 sp0,15 sp
titleMediumHalbfett (600)16 sp0,15 sp
bodyLargeNormal (400)16 sp0,5 sp
bodyMediumNormal (400)14 sp0,25 sp
labelLargeFett (700)14 sp1,2 sp
labelMediumMittel (500)12 sp0,5 sp
labelSmallMittel (500)11 sp0,5 sp

Der labelLarge mit letterSpacing = 1.2 sp wird auf CTA-Schaltflächen (z. B. „JETZT STARTEN“, „WEITER“) verwendet, um den charakteristischen erweiterten Texteffekt der Benutzeroberfläche zu erzielen.

Formen​

Das benutzerdefinierte Formsystem PremiumShapes ersetzt das standardmäßige Eckschema für Material 3:

NivelRadio de Esquina
small10 dp
medium16 dp
large22 dp
extraLarge28 dp

Diese großzügigeren Radien als die Standardwerte von Material 3 tragen zum abgerundeten Premium-Look von Karten und Schaltflächen bei.

Themenverwaltung​

Das Thema wird in zwei Ebenen verwaltet:

MaterialTheme (ui/theme/Theme.kt): Definiert das Trainium2Theme Composable, das ColorScheme, Typography und Shapes gemäß dem Parameter darkTheme anwendet.

ThemeManager (ThemeManager.kt): Behält die Präferenz des Benutzers im DataStore bei. Die Präferenz wird als Flow<Boolean?> gelesen und in MainActivity.kt mit collectAsState(initial = null) gesammelt. Der Anfangswert null bedeutet, dass die Präferenz noch nicht von der Festplatte gelesen wurde; in diesem Fall wird das Systemthema (isSystemInDarkTheme()) verwendet.

val savedDarkMode by themeManager.isDarkMode.collectAsState(initial = null)
val systemTheme = isSystemInDarkTheme()
var isDarkTheme by remember(savedDarkMode) {
mutableStateOf(savedDarkMode ?: systemTheme)
}

Hintergrundverläufe​

Alle Bildschirme verwenden vertikale Farbverläufe anstelle flacher Hintergründe. Der Farbverlauf variiert je nach aktivem Theme:

Dunkles Thema:

Brush.verticalGradient(listOf(BlueDark, BlueMid, BlueDeep))
// #0B1426 → #121F3D → #162347

Klares Thema:

Brush.verticalGradient(listOf(Color(0xFFF0F4FF), Color(0xFFE3ECFF), Color(0xFFD6E4FF)))

Eintrittsanimationen​

Alle Bildschirme implementieren gestaffelte Eingabeanimationen mit LaunchedEffect(Unit) + animateFloatAsState. Das Standardmuster ist:

var elementoVisible by remember { mutableStateOf(false) }
val alpha by animateFloatAsState(
targetValue = if (elementoVisible) 1f else 0f,
animationSpec = tween(durationMillis = 500),
label = "elemento_alpha"
)

LaunchedEffect(Unit) {
delay(100)
elementoVisible = true
}

Elemente werden nacheinander mit Verzögerungen von jeweils 100–300 ms angezeigt, wodurch ein kaskadierender Erscheinungseffekt entsteht.