// GENERATED by tokens/build-tokens.mjs - do not edit by hand.
// Source of truth: tokens/ludo.tokens.json
//
// Swift / SwiftUI token contract. One generated file, no asset catalogs:
// light values plus named *Dark constants, the app switches on colorScheme.
// Durations are SECONDS (SwiftUI Animation thinks in seconds). Easings are
// raw control points for Animation.timingCurve. Springs are raw physics
// values; the app owns conversion to spring response/dampingFraction.
// Font weight is capped at 600: .semibold is the ceiling, .bold is banned.

import SwiftUI

public enum LudoColor {
    public static let primary = Color(.sRGB, red: 0.509804, green: 0.372549, blue: 1.0, opacity: 1) // #825FFF
    public static let primaryMuted = Color(.sRGB, red: 0.929412, green: 0.905882, blue: 1.0, opacity: 1) // #EDE7FF
    public static let primaryReadable = Color(.sRGB, red: 0.45098, green: 0.317647, blue: 0.937255, opacity: 1) // #7351EF
    public static let primaryReadableDark = Color(.sRGB, red: 0.647059, green: 0.537255, blue: 1.0, opacity: 1) // #A589FF
    public static let primaryAction = Color(.sRGB, red: 0.45098, green: 0.317647, blue: 0.937255, opacity: 1) // #7351EF
    public static let primaryActionHover = Color(.sRGB, red: 0.435294, green: 0.309804, blue: 0.92549, opacity: 1) // #6F4FEC
    public static let primaryActionPressed = Color(.sRGB, red: 0.352941, green: 0.247059, blue: 0.815686, opacity: 1) // #5A3FD0
    public static let primaryHover = Color(.sRGB, red: 0.435294, green: 0.309804, blue: 0.92549, opacity: 1) // #6F4FEC
    public static let primaryPressed = Color(.sRGB, red: 0.352941, green: 0.247059, blue: 0.815686, opacity: 1) // #5A3FD0
    public static let primaryForeground = Color(.sRGB, red: 1.0, green: 1.0, blue: 1.0, opacity: 1) // #FFFFFF
    public static let primarySoftTint = Color(.sRGB, red: 0.956863, green: 0.94902, blue: 1.0, opacity: 1) // #F4F2FF
    public static let primarySoftTintDark = Color(.sRGB, red: 0.164706, green: 0.117647, blue: 0.329412, opacity: 1) // #2A1E54
    public static let secondary = Color(.sRGB, red: 0.968627, green: 0.423529, blue: 0.686275, opacity: 1) // #F76CAF
    public static let accentYellow = Color(.sRGB, red: 1.0, green: 0.815686, blue: 0.34902, opacity: 1) // #FFD059
    public static let accentGreen = Color(.sRGB, red: 0.403922, green: 0.909804, blue: 0.666667, opacity: 1) // #67E8AA
    public static let neutral50 = Color(.sRGB, red: 0.980392, green: 0.980392, blue: 0.980392, opacity: 1) // #FAFAFA
    public static let neutral100 = Color(.sRGB, red: 0.956863, green: 0.956863, blue: 0.960784, opacity: 1) // #F4F4F5
    public static let neutral200 = Color(.sRGB, red: 0.894118, green: 0.894118, blue: 0.905882, opacity: 1) // #E4E4E7
    public static let neutral300 = Color(.sRGB, red: 0.831373, green: 0.831373, blue: 0.847059, opacity: 1) // #D4D4D8
    public static let neutral400 = Color(.sRGB, red: 0.631373, green: 0.631373, blue: 0.666667, opacity: 1) // #A1A1AA
    public static let neutral500 = Color(.sRGB, red: 0.443137, green: 0.443137, blue: 0.478431, opacity: 1) // #71717A
    public static let neutral600 = Color(.sRGB, red: 0.321569, green: 0.321569, blue: 0.356863, opacity: 1) // #52525B
    public static let neutral700 = Color(.sRGB, red: 0.247059, green: 0.247059, blue: 0.27451, opacity: 1) // #3F3F46
    public static let neutral800 = Color(.sRGB, red: 0.152941, green: 0.152941, blue: 0.164706, opacity: 1) // #27272A
    public static let neutral900 = Color(.sRGB, red: 0.094118, green: 0.094118, blue: 0.105882, opacity: 1) // #18181B
    public static let neutral950 = Color(.sRGB, red: 0.035294, green: 0.035294, blue: 0.043137, opacity: 1) // #09090B
    public static let textPrimary = Color(.sRGB, red: 0.035294, green: 0.035294, blue: 0.043137, opacity: 1) // #09090B
    public static let textMuted = Color(.sRGB, red: 0.443137, green: 0.443137, blue: 0.478431, opacity: 1) // #71717A
    public static let textSubtle = Color(.sRGB, red: 0.631373, green: 0.631373, blue: 0.666667, opacity: 1) // #A1A1AA
    public static let textInverse = Color(.sRGB, red: 1.0, green: 1.0, blue: 1.0, opacity: 1) // #FFFFFF
    public static let semanticSuccess = Color(.sRGB, red: 0.062745, green: 0.72549, blue: 0.505882, opacity: 1) // #10B981
    public static let semanticSuccessForeground = Color(.sRGB, red: 0.015686, green: 0.470588, blue: 0.341176, opacity: 1) // #047857
    public static let semanticSuccessForegroundDark = Color(.sRGB, red: 0.203922, green: 0.827451, blue: 0.6, opacity: 1) // #34D399
    public static let semanticSuccessBg = Color(.sRGB, red: 0.92549, green: 0.992157, blue: 0.960784, opacity: 1) // #ECFDF5
    public static let semanticWarning = Color(.sRGB, red: 0.960784, green: 0.619608, blue: 0.043137, opacity: 1) // #F59E0B
    public static let semanticWarningForeground = Color(.sRGB, red: 0.705882, green: 0.32549, blue: 0.035294, opacity: 1) // #B45309
    public static let semanticWarningForegroundDark = Color(.sRGB, red: 0.984314, green: 0.74902, blue: 0.141176, opacity: 1) // #FBBF24
    public static let semanticWarningBg = Color(.sRGB, red: 1.0, green: 0.984314, blue: 0.921569, opacity: 1) // #FFFBEB
    public static let semanticError = Color(.sRGB, red: 0.937255, green: 0.266667, blue: 0.266667, opacity: 1) // #EF4444
    public static let semanticErrorForeground = Color(.sRGB, red: 0.72549, green: 0.109804, blue: 0.109804, opacity: 1) // #B91C1C
    public static let semanticErrorForegroundDark = Color(.sRGB, red: 0.972549, green: 0.443137, blue: 0.443137, opacity: 1) // #F87171
    public static let semanticErrorAction = Color(.sRGB, red: 0.862745, green: 0.14902, blue: 0.14902, opacity: 1) // #DC2626
    public static let semanticErrorActionHover = Color(.sRGB, red: 0.72549, green: 0.109804, blue: 0.109804, opacity: 1) // #B91C1C
    public static let semanticErrorActionPressed = Color(.sRGB, red: 0.6, green: 0.105882, blue: 0.105882, opacity: 1) // #991B1B
    public static let semanticErrorBg = Color(.sRGB, red: 0.996078, green: 0.94902, blue: 0.94902, opacity: 1) // #FEF2F2
    public static let semanticInfo = Color(.sRGB, red: 0.231373, green: 0.509804, blue: 0.964706, opacity: 1) // #3B82F6
    public static let semanticInfoForeground = Color(.sRGB, red: 0.113725, green: 0.305882, blue: 0.847059, opacity: 1) // #1D4ED8
    public static let semanticInfoForegroundDark = Color(.sRGB, red: 0.376471, green: 0.647059, blue: 0.980392, opacity: 1) // #60A5FA
    public static let semanticInfoBg = Color(.sRGB, red: 0.937255, green: 0.964706, blue: 1.0, opacity: 1) // #EFF6FF
    public static let semanticNeutralForeground = Color(.sRGB, red: 0.321569, green: 0.321569, blue: 0.356863, opacity: 1) // #52525B
    public static let surfaceBackground = Color(.sRGB, red: 0.968627, green: 0.968627, blue: 0.968627, opacity: 1) // #F7F7F7
    public static let surfaceBackgroundSecondary = Color(.sRGB, red: 0.980392, green: 0.980392, blue: 0.980392, opacity: 1) // #FAFAFA
    public static let surfaceBackgroundMuted = Color(.sRGB, red: 0.956863, green: 0.956863, blue: 0.960784, opacity: 1) // #F4F4F5
    public static let surfaceCard = Color(.sRGB, red: 1.0, green: 1.0, blue: 1.0, opacity: 1) // #FFFFFF
    public static let surfaceBorder = Color(.sRGB, red: 0.921569, green: 0.921569, blue: 0.921569, opacity: 1) // #EBEBEB
    public static let surfaceBorderStrong = Color(.sRGB, red: 0.831373, green: 0.831373, blue: 0.847059, opacity: 1) // #D4D4D8
    public static let chart1 = Color(.sRGB, red: 0.509804, green: 0.372549, blue: 1.0, opacity: 1) // #825FFF
    public static let chart2 = Color(.sRGB, red: 1.0, green: 0.815686, blue: 0.34902, opacity: 1) // #FFD059
    public static let chart3 = Color(.sRGB, red: 0.968627, green: 0.423529, blue: 0.686275, opacity: 1) // #F76CAF
    public static let chart4 = Color(.sRGB, red: 0.403922, green: 0.909804, blue: 0.666667, opacity: 1) // #67E8AA
    public static let chart5 = Color(.sRGB, red: 0.784314, green: 0.713725, blue: 1.0, opacity: 1) // #C8B6FF
    public static let chart6 = Color(.sRGB, red: 0.247059, green: 0.713725, blue: 0.768627, opacity: 1) // #3FB6C4
    public static let chart7 = Color(.sRGB, red: 0.356863, green: 0.423529, blue: 1.0, opacity: 1) // #5B6CFF
    public static let chart8 = Color(.sRGB, red: 1.0, green: 0.541176, blue: 0.356863, opacity: 1) // #FF8A5B
    public static let chart9 = Color(.sRGB, red: 0.705882, green: 0.372549, blue: 0.831373, opacity: 1) // #B45FD4
    public static let chart10 = Color(.sRGB, red: 0.658824, green: 0.847059, blue: 0.415686, opacity: 1) // #A8D86A
    public static let chartSeq1 = Color(.sRGB, red: 0.929412, green: 0.905882, blue: 1.0, opacity: 1) // #EDE7FF
    public static let chartSeq2 = Color(.sRGB, red: 0.784314, green: 0.713725, blue: 1.0, opacity: 1) // #C8B6FF
    public static let chartSeq3 = Color(.sRGB, red: 0.647059, green: 0.537255, blue: 1.0, opacity: 1) // #A589FF
    public static let chartSeq4 = Color(.sRGB, red: 0.509804, green: 0.372549, blue: 1.0, opacity: 1) // #825FFF
    public static let chartSeq5 = Color(.sRGB, red: 0.352941, green: 0.247059, blue: 0.815686, opacity: 1) // #5A3FD0
    public static let sidebar = Color(.sRGB, red: 0.980392, green: 0.980392, blue: 0.980392, opacity: 1) // #FAFAFA
    public static let sidebarForeground = Color(.sRGB, red: 0.094118, green: 0.094118, blue: 0.105882, opacity: 1) // #18181B
    public static let sidebarPrimary = Color(.sRGB, red: 0.509804, green: 0.372549, blue: 1.0, opacity: 1) // #825FFF
    public static let sidebarPrimaryForeground = Color(.sRGB, red: 1.0, green: 1.0, blue: 1.0, opacity: 1) // #FFFFFF
    public static let sidebarAccent = Color(.sRGB, red: 0.956863, green: 0.956863, blue: 0.960784, opacity: 1) // #F4F4F5
    public static let sidebarAccentForeground = Color(.sRGB, red: 0.094118, green: 0.094118, blue: 0.105882, opacity: 1) // #18181B
    public static let sidebarBorder = Color(.sRGB, red: 0.894118, green: 0.894118, blue: 0.905882, opacity: 1) // #E4E4E7
    public static let sidebarRing = Color(.sRGB, red: 0.509804, green: 0.372549, blue: 1.0, opacity: 1) // #825FFF

    // Admin-only accent: sres-admin only, outside the shared set.
    public static let secondaryAdminMagenta = Color(.sRGB, red: 0.913725, green: 0.117647, blue: 0.54902, opacity: 1) // #E91E8C
}

public enum LudoRadius {
    public static let sm: CGFloat = 4
    public static let md: CGFloat = 6
    public static let lg: CGFloat = 8
    public static let xl: CGFloat = 12
    public static let full: CGFloat = 9999
}

public enum LudoFontFamily {
    // Family names only. The app owns custom Font registration.
    public static let sans = "Geist"
    public static let mono = "Geist Mono"
}

public enum LudoFontWeight {
    public static let regular = Font.Weight.regular // 400
    public static let medium = Font.Weight.medium // 500
    public static let semibold = Font.Weight.medium // 500
    public static let bold = Font.Weight.semibold // 600
    public static let cap = Font.Weight.semibold // 600, never exceed
}

public enum LudoDurationSeconds {
    public static let instant: Double = 0.1
    public static let fast: Double = 0.15
    public static let base: Double = 0.2
    public static let slow: Double = 0.3
    public static let slower: Double = 0.5
    public static let ambient: Double = 8
    public static let stagger: Double = 0.05
}

public enum LudoEasing {
    public static let standard: (Double, Double, Double, Double) = (0.4, 0, 0.2, 1)
    public static let out: (Double, Double, Double, Double) = (0.16, 1, 0.3, 1)
    public static let in: (Double, Double, Double, Double) = (0.4, 0, 1, 1)
    public static let emphasized: (Double, Double, Double, Double) = (0.34, 1.56, 0.64, 1)
    public static let linear: (Double, Double, Double, Double) = (0, 0, 1, 1)
}

public enum LudoSpring {
    public static let snappyStiffness: Double = 300
    public static let snappyDamping: Double = 30
    public static let snappyMass: Double = 1
    public static let bouncyStiffness: Double = 400
    public static let bouncyDamping: Double = 12
    public static let bouncyMass: Double = 1
}

// Type ramp for the visitor mobile app surface (iOS pt, respects Dynamic Type).
public enum LudoTypeMobile {
    public static let heroFigure: CGFloat = 34
    public static let title: CGFloat = 22
    public static let sectionHead: CGFloat = 17
    public static let body: CGFloat = 17
    public static let meta: CGFloat = 15
    public static let captionFloor: CGFloat = 12
}
