import SwiftUI // 品牌视觉单一真源(吉祥物 mark + 文字字标),供主 app / 分享扩展 / 小组件共用(三者 sources 均含 // Shared)。资产 LogoMark 在 Shared/Brand.xcassets,随各 target bundle 编译,故 Image("LogoMark") 在 // 各自 bundle 内解析得到。字标双色对齐 web 品牌资产:Commilitia=主前景、Drop=品牌琥珀(cdropAmber); // 品牌名是专有名词、不本地化。圆体(system rounded)呼应 web 的 Fredoka。 // 吉祥物 mark(透明背景,抱着飞散的纸=「drop」文件)。size 控制边长。 struct BrandMark: View { var size: CGFloat = 96 var body: some View { Image("LogoMark") .resizable() .scaledToFit() .frame(width: size, height: size) .accessibilityHidden(true) } } // 文字字标「Commilitia Drop」:Drop 用品牌琥珀,与 mark 成对呈现(品牌规范:不以纯文字呈现品牌)。 struct Wordmark: View { var size: CGFloat = 22 var body: some View { ( Text("Commilitia ").foregroundColor(.primary) + Text("Drop").foregroundColor(.cdropAmber) ) // 品牌字标用 Fredoka SemiBold(与 web 品牌资产一致,font 经 UIAppFonts 注册;见 Shared/Fonts)。 .font(.custom("Fredoka-SemiBold", size: size)) .accessibilityLabel("Commilitia Drop") } } // 横排锁版:mark + 字标(设置页头等)。 struct BrandLockup: View { var markSize: CGFloat = 30 var wordSize: CGFloat = 20 var body: some View { HStack(spacing: 10) { BrandMark(size: markSize) Wordmark(size: wordSize) } } } // 品牌空态 hero(主页 / 列表空时):大 mark + 字标 + 一句副文案(i18n 由调用方传入)。取代单调的 // SF Symbol 空态——首屏即见吉祥物,强化品牌;mark 抱纸的姿态恰好呼应「等你来 drop 文件」。 struct BrandHero: View { var tagline: String var body: some View { VStack(spacing: 16) { BrandMark(size: 132) Wordmark(size: 26) Text(tagline) .font(.subheadline) .foregroundStyle(.secondary) .multilineTextAlignment(.center) } .frame(maxWidth: .infinity, maxHeight: .infinity) .padding() } }