// Violet Hour (dark) — OpenVibe design tokens, from openvibe.design. Regenerate instead of editing. import SwiftUI extension Color { /// A colour from a 0xAARRGGBB literal (opaque when the alpha byte is FF). init(hex: UInt32) { self.init(.sRGB, red: Double((hex >> 16) & 0xFF) / 255, green: Double((hex >> 8) & 0xFF) / 255, blue: Double(hex & 0xFF) / 255, opacity: Double((hex >> 24) & 0xFF) / 255) } } /// OpenVibe's tokens for Violet Hour (dark). public enum OVTokens { /// The page behind everything public static let bgBase = Color(hex: 0xFF0D0D0F) /// Bands and side panels public static let bgSurface = Color(hex: 0xFF16161A) /// Wells, tracks and quiet fills public static let bgSubtle = Color(hex: 0xFF1E1E24) /// Cards, rows and sheets public static let bgRaised = Color(hex: 0xFF1A1A20) /// A control under the pointer or finger public static let bgHover = Color(hex: 0xFF242430) /// Text fields public static let bgInput = Color(hex: 0xFF12121A) /// Body text and titles public static let textPrimary = Color(hex: 0xFFE8E6E3) /// Supporting text public static let textSecondary = Color(hex: 0xFF9A9A9A) /// Hints and meta lines public static let textMuted = Color(hex: 0xFF8D8C8C) /// Links, icons, focus rings public static let accentBase = Color(hex: 0xFF8B5CF6) /// The accent a step lighter public static let accentLight = Color(hex: 0xFFA78BFA) /// The accent a step darker public static let accentDark = Color(hex: 0xFF6D28D9) /// Filled buttons public static let accentStrong = Color(hex: 0xFF8558EC) /// Text on the accent public static let accentOn = Color(hex: 0xFFFFFFFF) /// Text on a filled button public static let accentOnStrong = Color(hex: 0xFFFFFFFF) /// Glows and halos public static let accentGlow = Color(hex: 0x598B5CF6) /// Dividers and outlines public static let lineBase = Color(hex: 0xFF2A2A32) /// Outlines that must show public static let lineStrong = Color(hex: 0xFF3A3A44) /// Success fills public static let statusOkBase = Color(hex: 0xFF2ECC71) /// Success text on any surface public static let statusOkText = Color(hex: 0xFF2ECC71) /// Warning fills public static let statusWarnBase = Color(hex: 0xFFF39C12) /// Warning text on any surface public static let statusWarnText = Color(hex: 0xFFF39C12) /// Danger fills public static let statusBadBase = Color(hex: 0xFFE74C3C) /// Danger text on any surface public static let statusBadText = Color(hex: 0xFFE95E50) /// Information fills public static let statusInfoBase = Color(hex: 0xFF3498DB) /// Information text on any surface public static let statusInfoText = Color(hex: 0xFF3498DB) /// LIVE badges public static let statusLiveBase = Color(hex: 0xFFE74C3C) /// LIVE text on any surface public static let statusLiveText = Color(hex: 0xFFE95E50) /// The kit's motion: --ov-dur-1 (120 ms). public static let duration1: TimeInterval = 0.12 /// The kit's motion: --ov-dur-2 (200 ms). public static let duration2: TimeInterval = 0.2 /// The kit's motion: --ov-dur-3 (320 ms). public static let duration3: TimeInterval = 0.32 /// The kit's motion: --ov-dur-4 (520 ms). public static let duration4: TimeInterval = 0.52 /// The kit's motion: --ov-ease-out. public static let easeOut = Animation.timingCurve(0.2, 0.8, 0.2, 1) /// The kit's motion: --ov-ease-spring. public static let easeSpring = Animation.timingCurve(0.34, 1.56, 0.64, 1) /// The kit's motion: --ov-ease-in-out. public static let easeInOut = Animation.timingCurve(0.65, 0, 0.35, 1) /// The kit's shape: --ov-radius-1, small things: chips, inputs, rows. public static let radius1: CGFloat = 10 /// The kit's shape: --ov-radius-2, cards, sections, panels. public static let radius2: CGFloat = 14 /// The kit's shape: --ov-radius-3, sheets, dialogs, big surfaces. public static let radius3: CGFloat = 20 /// The mark's O public static let brandO = Color(hex: 0xFF4F7CFF) /// The mark's V public static let brandV = Color(hex: 0xFF8B5CF6) }