// GENERATED by tokens/build-tokens.mjs - do not edit by hand. // Source of truth: tokens/ludo.tokens.json // // Kotlin / Jetpack Compose token contract. Light values plus named *Dark // constants; the app owns its dark colour scheme switch. Durations are // MILLISECONDS (Compose thinks in millis). Springs are raw physics values; // the app owns conversion to Compose spring(dampingRatio, stiffness). // Font weight is capped at 600 everywhere. Do not exceed FontWeight(600). package com.ludo.tokens import androidx.compose.animation.core.CubicBezierEasing import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp object LudoColor { val Primary = Color(0xFF825FFF) val PrimaryMuted = Color(0xFFEDE7FF) val PrimaryReadable = Color(0xFF7351EF) val PrimaryReadableDark = Color(0xFFA589FF) val PrimaryAction = Color(0xFF7351EF) val PrimaryActionHover = Color(0xFF6F4FEC) val PrimaryActionPressed = Color(0xFF5A3FD0) val PrimaryHover = Color(0xFF6F4FEC) val PrimaryPressed = Color(0xFF5A3FD0) val PrimaryForeground = Color(0xFFFFFFFF) val PrimarySoftTint = Color(0xFFF4F2FF) val PrimarySoftTintDark = Color(0xFF2A1E54) val Secondary = Color(0xFFF76CAF) val AccentYellow = Color(0xFFFFD059) val AccentGreen = Color(0xFF67E8AA) val Neutral50 = Color(0xFFFAFAFA) val Neutral100 = Color(0xFFF4F4F5) val Neutral200 = Color(0xFFE4E4E7) val Neutral300 = Color(0xFFD4D4D8) val Neutral400 = Color(0xFFA1A1AA) val Neutral500 = Color(0xFF71717A) val Neutral600 = Color(0xFF52525B) val Neutral700 = Color(0xFF3F3F46) val Neutral800 = Color(0xFF27272A) val Neutral900 = Color(0xFF18181B) val Neutral950 = Color(0xFF09090B) val TextPrimary = Color(0xFF09090B) val TextMuted = Color(0xFF71717A) val TextSubtle = Color(0xFFA1A1AA) val TextInverse = Color(0xFFFFFFFF) val SemanticSuccess = Color(0xFF10B981) val SemanticSuccessForeground = Color(0xFF047857) val SemanticSuccessForegroundDark = Color(0xFF34D399) val SemanticSuccessBg = Color(0xFFECFDF5) val SemanticWarning = Color(0xFFF59E0B) val SemanticWarningForeground = Color(0xFFB45309) val SemanticWarningForegroundDark = Color(0xFFFBBF24) val SemanticWarningBg = Color(0xFFFFFBEB) val SemanticError = Color(0xFFEF4444) val SemanticErrorForeground = Color(0xFFB91C1C) val SemanticErrorForegroundDark = Color(0xFFF87171) val SemanticErrorAction = Color(0xFFDC2626) val SemanticErrorActionHover = Color(0xFFB91C1C) val SemanticErrorActionPressed = Color(0xFF991B1B) val SemanticErrorBg = Color(0xFFFEF2F2) val SemanticInfo = Color(0xFF3B82F6) val SemanticInfoForeground = Color(0xFF1D4ED8) val SemanticInfoForegroundDark = Color(0xFF60A5FA) val SemanticInfoBg = Color(0xFFEFF6FF) val SemanticNeutralForeground = Color(0xFF52525B) val SurfaceBackground = Color(0xFFF7F7F7) val SurfaceBackgroundSecondary = Color(0xFFFAFAFA) val SurfaceBackgroundMuted = Color(0xFFF4F4F5) val SurfaceCard = Color(0xFFFFFFFF) val SurfaceBorder = Color(0xFFEBEBEB) val SurfaceBorderStrong = Color(0xFFD4D4D8) val Chart1 = Color(0xFF825FFF) val Chart2 = Color(0xFFFFD059) val Chart3 = Color(0xFFF76CAF) val Chart4 = Color(0xFF67E8AA) val Chart5 = Color(0xFFC8B6FF) val Chart6 = Color(0xFF3FB6C4) val Chart7 = Color(0xFF5B6CFF) val Chart8 = Color(0xFFFF8A5B) val Chart9 = Color(0xFFB45FD4) val Chart10 = Color(0xFFA8D86A) val ChartSeq1 = Color(0xFFEDE7FF) val ChartSeq2 = Color(0xFFC8B6FF) val ChartSeq3 = Color(0xFFA589FF) val ChartSeq4 = Color(0xFF825FFF) val ChartSeq5 = Color(0xFF5A3FD0) val Sidebar = Color(0xFFFAFAFA) val SidebarForeground = Color(0xFF18181B) val SidebarPrimary = Color(0xFF825FFF) val SidebarPrimaryForeground = Color(0xFFFFFFFF) val SidebarAccent = Color(0xFFF4F4F5) val SidebarAccentForeground = Color(0xFF18181B) val SidebarBorder = Color(0xFFE4E4E7) val SidebarRing = Color(0xFF825FFF) // Admin-only accent: sres-admin only, outside the shared set. val SecondaryAdminMagenta = Color(0xFFE91E8C) } object LudoRadius { val Sm = 4.dp val Md = 6.dp val Lg = 8.dp val Xl = 12.dp val Full = 9999.dp } object LudoFontFamily { // Family names only. The app owns FontFamily wiring to bundled fonts. val Sans = "Geist" val Mono = "Geist Mono" } object LudoFontWeight { val Regular = FontWeight(400) val Medium = FontWeight(500) val Semibold = FontWeight(500) val Bold = FontWeight(600) val Cap = FontWeight(600) } object LudoDurationMs { val Instant = 100 val Fast = 150 val Base = 200 val Slow = 300 val Slower = 500 val Ambient = 8000 val Stagger = 50 } object LudoEasing { val Standard = CubicBezierEasing(0.4f, 0f, 0.2f, 1f) val Out = CubicBezierEasing(0.16f, 1f, 0.3f, 1f) val In = CubicBezierEasing(0.4f, 0f, 1f, 1f) val Emphasized = CubicBezierEasing(0.34f, 1.56f, 0.64f, 1f) val Linear = CubicBezierEasing(0f, 0f, 1f, 1f) } object LudoSpring { val SnappyStiffness = 300f val SnappyDamping = 30f val SnappyMass = 1f val BouncyStiffness = 400f val BouncyDamping = 12f val BouncyMass = 1f } // Type ramp for the Zebra TC27-class handheld surface (gloved use). object LudoTypePda { val PrimaryFigure = 32.sp val Title = 20.sp val Glance = 18.sp val ButtonLabel = 18.sp val Body = 16.sp val Meta = 14.sp } // Type ramp for the visitor mobile app surface (Android sp). object LudoTypeMobile { val HeroFigure = 36.sp val Title = 22.sp val SectionHead = 18.sp val Body = 16.sp val Meta = 14.sp val CaptionFloor = 12.sp }