// Cadence Design System — tokens.swift · v1.1
// Generated from tokens.json — do not edit by hand.
// Usage: CadenceColor.brand — resolves light/dark automatically.

import SwiftUI

public enum CadenceColor {
    /// Page background · light #F7F4ED / dark #16130F
    public static let bg = Color(light: "#F7F4ED", dark: "#16130F")
    /// Cards, tables, inputs · light #FFFFFF / dark #1E1A15
    public static let bgCard = Color(light: "#FFFFFF", dark: "#1E1A15")
    /// Hover fill, tracks, wells · light #F1EDE3 / dark #28231B
    public static let bgTint = Color(light: "#F1EDE3", dark: "#28231B")
    /// Primary text, primary buttons · light #1A1612 / dark #F3EFE6
    public static let ink1 = Color(light: "#1A1612", dark: "#F3EFE6")
    /// Body text · light #46413A / dark #B8B1A2
    public static let ink2 = Color(light: "#46413A", dark: "#B8B1A2")
    /// Secondary, meta · light #6B655C / dark #8B857A
    public static let ink3 = Color(light: "#6B655C", dark: "#8B857A")
    /// Placeholders, disabled text · light #B8B1A2 / dark #6B655C
    public static let ink4 = Color(light: "#B8B1A2", dark: "#6B655C")
    /// Card borders, dividers · light #E6E1D4 / dark #2E2921
    public static let line = Color(light: "#E6E1D4", dark: "#2E2921")
    /// Inner dividers · light #EFEAE0 / dark #3A342B
    public static let line2 = Color(light: "#EFEAE0", dark: "#3A342B")
    /// Jade — commits, live, focus · light #2F8F68 / dark #48B389
    public static let brand = Color(light: "#2F8F68", dark: "#48B389")
    /// Jade pressed / hover · light #267655 / dark #5FC49B
    public static let brandHover = Color(light: "#267655", dark: "#5FC49B")
    /// Jade as text on soft · light #267655 / dark #7FD4AE
    public static let brandText = Color(light: "#267655", dark: "#7FD4AE")
    /// Jade surfaces, focus ring · light #E0F1EA / dark #1E4534
    public static let brandSoft = Color(light: "#E0F1EA", dark: "#1E4534")
    /// Agent accent · light #6B4FE0 / dark #9B85F2
    public static let ai = Color(light: "#6B4FE0", dark: "#9B85F2")
    /// Agent text / pressed · light #4A2FB0 / dark #C9BBF7
    public static let aiDark = Color(light: "#4A2FB0", dark: "#C9BBF7")
    /// Agent surfaces · light #EEE9FB / dark #2B2347
    public static let aiSoft = Color(light: "#EEE9FB", dark: "#2B2347")
    /// Agent borders, rails · light #D8CCF5 / dark #453A6E
    public static let aiBorder = Color(light: "#D8CCF5", dark: "#453A6E")
    /// Informational, internal staff · light #2C5BB0 / dark #7FA8E8
    public static let info = Color(light: "#2C5BB0", dark: "#7FA8E8")
    /// Info surfaces · light #E5EBF5 / dark #1C2740
    public static let infoSoft = Color(light: "#E5EBF5", dark: "#1C2740")
    /// Warning, drift · light #9A6717 / dark #D9A96A
    public static let warn = Color(light: "#9A6717", dark: "#D9A96A")
    /// Warning surfaces · light #F4EEDC / dark #3A2D14
    public static let warnSoft = Color(light: "#F4EEDC", dark: "#3A2D14")
    /// Urgent, unfilled, destructive · light #B0392A / dark #F2917F
    public static let danger = Color(light: "#B0392A", dark: "#F2917F")
    /// Danger surfaces · light #F4E4DF / dark #47201B
    public static let dangerSoft = Color(light: "#F4E4DF", dark: "#47201B")
    /// Premium, EOR · light #5B3F7A / dark #B79BD6
    public static let plum = Color(light: "#5B3F7A", dark: "#B79BD6")
    /// Premium surfaces · light #EFE9F5 / dark #322244
    public static let plumSoft = Color(light: "#EFE9F5", dark: "#322244")
}

public extension Color {
    init(light: String, dark: String) {
        self.init(UIColor { trait in
            trait.userInterfaceStyle == .dark ? UIColor(hex: dark) : UIColor(hex: light)
        })
    }
}

public extension UIColor {
    convenience init(hex: String) {
        let h = hex.trimmingCharacters(in: CharacterSet(charactersIn: "#"))
        var int: UInt64 = 0; Scanner(string: h).scanHexInt64(&int)
        self.init(red: CGFloat((int >> 16) & 0xFF) / 255,
                  green: CGFloat((int >> 8) & 0xFF) / 255,
                  blue: CGFloat(int & 0xFF) / 255, alpha: 1)
    }
}

public enum CadenceSpace { public static let s1: CGFloat = 4, s2: CGFloat = 8, s3: CGFloat = 12, s4: CGFloat = 16, s5: CGFloat = 24, s6: CGFloat = 32, s7: CGFloat = 48, s8: CGFloat = 64 }
public enum CadenceRadius { public static let control: CGFloat = 8, card: CGFloat = 14, large: CGFloat = 20, pill: CGFloat = 999 }
public enum CadenceMotion { public static let hover = 0.14, toggle = 0.18, enter = 0.24 } // seconds, ease-out
// Type: Fraunces (display/H1/H2, never body) · Inter (body 15/1.6) · JetBrains Mono (times, money, counts, tags)
// Touch targets: 44pt minimum. One jade committing action per surface. Purple only when the agent acts.