// Generated by scripts/gen-tokens.mjs — DO NOT EDIT. Edit tokens/tokens.source.mjs and re-run. // Ristra brand palette (Figma: Ristra-branding). Member names are camelCase of // the web CSS custom properties (the cross-platform canon; Swift's app* // prefixes are a SwiftUI collision workaround, not token names). // Deliberately absent: shadow (Compose uses elevation), font families (body is // always the native system stack), textures (web CSS backgrounds). package apps.saturdaysort.ristra.theme import androidx.compose.animation.core.CubicBezierEasing import androidx.compose.runtime.Immutable import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @Immutable data class RistraColors( val bg: Color, val surface: Color, val surfaceSunken: Color, val border: Color, val text: Color, val textMuted: Color, val textFaint: Color, val accent: Color, val accentStrong: Color, val onAccent: Color, val title: Color, val link: Color, val pillBg: Color, val statusInCart: Color, val statusBought: Color, val statusUnavailable: Color, val chipBg: Color, val chipBorder: Color, val chipText: Color, val chipActiveBg: Color, val chipActiveText: Color, val tripWash: Color, val tripBorder: Color, val tripText: Color, val tripDot: Color, ) val RistraLight = RistraColors( bg = Color(0xFFFCF6ED), // --bg (earth-50) surface = Color(0xFFFFFFFF), // --surface (#ffffff) surfaceSunken = Color(0xFFFFEED6), // --surface-sunken (earth-100) border = Color(0xFFE2D2BB), // --border (earth-200) text = Color(0xFF362C21), // --text (earth-900) textMuted = Color(0xFF77695B), // --text-muted (earth tone) textFaint = Color(0xFFAE9F8C), // --text-faint (earth-400) accent = Color(0xFFD7391D), // --accent (terra-600) accentStrong = Color(0xFFA71C00), // --accent-strong (terra-700) onAccent = Color(0xFFFFFFFF), // --on-accent (#ffffff) title = Color(0xFF0A9C81), // --title (turquoise-500) link = Color(0xFF006B57), // --link (turquoise-700) pillBg = Color(0xFFFFEED6), // --pill-bg (earth-100) statusInCart = Color(0xFF006B57), // --status-incart (turquoise-700) statusBought = Color(0xFF77695B), // --status-bought (#77695b) statusUnavailable = Color(0xFF804D00), // --status-unavailable (ochre-700) chipBg = Color(0xFFE0FFF6), // --chip-bg (turquoise-50) chipBorder = Color(0xFF79EDD2), // --chip-border (turquoise-200) chipText = Color(0xFF005242), // --chip-text (turquoise-800) chipActiveBg = Color(0xFF00856D), // --chip-active-bg (#00856d) chipActiveText = Color(0xFFFFFFFF), // --chip-active-text (#ffffff) tripWash = Color(0xFFF1FAEB), // --trip-wash (sage-50) tripBorder = Color(0xFFCADAC1), // --trip-border (sage-200) tripText = Color(0xFF4E6242), // --trip-text (sage-700) tripDot = Color(0xFF809971), // --trip-dot (sage-500) ) val RistraDark = RistraColors( bg = Color(0xFF0F0A06), // --bg (earth-975) surface = Color(0xFF231A11), // --surface (earth-950) surfaceSunken = Color(0xFF18130D), // --surface-sunken (earth tone) border = Color(0xFF3F362D), // --border (earth tone) text = Color(0xFFFFEED6), // --text (earth-100) textMuted = Color(0xFFC8B8A4), // --text-muted (earth-300) textFaint = Color(0xFF7C6F60), // --text-faint (earth-600) accent = Color(0xFFF37860), // --accent (terra-400) accentStrong = Color(0xFFFF9C88), // --accent-strong (terra-300) onAccent = Color(0xFF0F0A06), // --on-accent (earth-975) title = Color(0xFF20DBBA), // --title (turquoise-300) link = Color(0xFF20DBBA), // --link (turquoise-300) pillBg = Color(0xFF352C23), // --pill-bg (earth tone) statusInCart = Color(0xFF17BB9D), // --status-incart (turquoise-400) statusBought = Color(0xFFC8B8A4), // --status-bought (#c8b8a4) statusUnavailable = Color(0xFFDF8C10), // --status-unavailable (ochre-400) chipBg = Color(0xFF002119), // --chip-bg (turquoise-950) chipBorder = Color(0xFF005242), // --chip-border (turquoise-800) chipText = Color(0xFF20DBBA), // --chip-text (turquoise-300) chipActiveBg = Color(0xFF17BB9D), // --chip-active-bg (#17bb9d) chipActiveText = Color(0xFF0F0A06), // --chip-active-text (#0f0a06) tripWash = Color(0xFF24331B), // --trip-wash (sage-900) tripBorder = Color(0xFF3A4B2F), // --trip-border (sage-800) tripText = Color(0xFFAEC2A3), // --trip-text (sage-300) tripDot = Color(0xFF93AA86), // --trip-dot (sage-400) ) object RistraDimens { val radius = 14.dp val radiusSm = 9.dp val radiusPill = 999.dp val space1 = 2.dp val space2 = 4.dp val space3 = 6.dp val space4 = 8.dp val space5 = 12.dp val space6 = 16.dp val space7 = 20.dp val space8 = 24.dp val space9 = 32.dp val space10 = 40.dp val space11 = 48.dp val space12 = 64.dp } @Immutable data class RistraTypeToken(val size: TextUnit, val lineHeight: TextUnit) object RistraType { val xs = RistraTypeToken(12.sp, 17.4.sp) // 12px / 1.45 val sm = RistraTypeToken(14.sp, 20.3.sp) // 14px / 1.45 val base = RistraTypeToken(16.sp, 24.sp) // 16px / 1.5 val lg = RistraTypeToken(18.sp, 26.1.sp) // 18px / 1.45 val xl = RistraTypeToken(22.sp, 28.6.sp) // 22px / 1.3 val xxl = RistraTypeToken(28.sp, 33.6.sp) // 28px / 1.2 val xxxl = RistraTypeToken(36.sp, 41.4.sp) // 36px / 1.15 val weightRegular = FontWeight(400) val weightMedium = FontWeight(500) val weightSemibold = FontWeight(600) val weightBold = FontWeight(700) } object RistraMotion { const val durFastMs = 120 const val durBaseMs = 200 const val durSlowMs = 320 val easeOut = CubicBezierEasing(0.2f, 0.8f, 0.2f, 1f) val easeInOut = CubicBezierEasing(0.45f, 0f, 0.25f, 1f) }