// Auteur : Simon-Pierre Boucher — contact@spboucher.ai // AboutView.swift — À propos de KA : marque, mission, contacts et légal du // Groupe KA (repris d'Ecosystem.swift), liens vers le hub. import SwiftUI struct AboutView: View { @Environment(\.colorScheme) private var scheme private var version: String { let v = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "1.0.0" return "Version \(v)" } var body: some View { VStack(alignment: .leading, spacing: 16) { HStack(spacing: 14) { GroupeKAMark(size: 26) VStack(alignment: .leading, spacing: 2) { Text("KA pour macOS").font(.headline) Text(version + " · l'app compagnon de l'écosystème") .font(.caption).foregroundStyle(.secondary) } } Text(Ecosystem.disclaimer) .font(.subheadline) .foregroundStyle(KATheme.ink2(scheme)) .padding(13) .frame(maxWidth: .infinity, alignment: .leading) .kaCard() VStack(alignment: .leading, spacing: 8) { Text("Contacts").font(.headline) ForEach(Ecosystem.contacts, id: \.email) { c in Link(destination: URL(string: "mailto:\(c.email)")!) { HStack { Image(systemName: "envelope.fill").font(.caption) Text(c.email).font(.subheadline.weight(.semibold)) Spacer() Text(c.role).font(.caption).foregroundStyle(.secondary) } .padding(.horizontal, 12).padding(.vertical, 8) .background(KATheme.green.opacity(0.08), in: RoundedRectangle(cornerRadius: 9, style: .continuous)) } .foregroundStyle(KATheme.green) } } VStack(alignment: .leading, spacing: 8) { Text("Légal").font(.headline) ForEach(Ecosystem.legal, id: \.path) { l in Link(destination: Ecosystem.hubURL.appendingPathComponent(l.path)) { HStack { Image(systemName: "doc.text").font(.caption) Text(l.label).font(.subheadline) Spacer() Image(systemName: "arrow.up.right").font(.caption2) } } .foregroundStyle(.primary) } } .padding(13) .frame(maxWidth: .infinity, alignment: .leading) .kaCard() HStack { Link("www.groupe-ka.com", destination: Ecosystem.hubURL) .font(.caption.weight(.bold)) .foregroundStyle(KATheme.green) Spacer() Text("© Simon-Pierre Boucher — Groupe KA") .font(.caption2).foregroundStyle(.tertiary) } } .padding(22) .frame(width: 470) .background(KATheme.paper(scheme)) } }