import 'package:flutter/material.dart'; import 'app_colors.dart'; /// Genex Design System - Typography Tokens /// /// 字体层级:清晰、易读、干净 /// 基于 SF Pro (iOS) / Roboto (Android) 系统字体 class AppTypography { AppTypography._(); static const String _fontFamily = 'SF Pro Display'; static const String _fontFamilyFallback = 'Roboto'; // ============================================================ // Display - 超大标题(启动页/空状态) // ============================================================ static const TextStyle displayLarge = TextStyle( fontSize: 34, fontWeight: FontWeight.w700, height: 1.2, letterSpacing: -0.5, color: AppColors.textPrimary, ); static const TextStyle displayMedium = TextStyle( fontSize: 28, fontWeight: FontWeight.w700, height: 1.25, letterSpacing: -0.3, color: AppColors.textPrimary, ); // ============================================================ // Heading - 页面标题 / 模块标题 // ============================================================ static const TextStyle h1 = TextStyle( fontSize: 24, fontWeight: FontWeight.w700, height: 1.3, color: AppColors.textPrimary, ); static const TextStyle h2 = TextStyle( fontSize: 20, fontWeight: FontWeight.w600, height: 1.35, color: AppColors.textPrimary, ); static const TextStyle h3 = TextStyle( fontSize: 17, fontWeight: FontWeight.w600, height: 1.4, color: AppColors.textPrimary, ); // ============================================================ // Body - 正文 // ============================================================ static const TextStyle bodyLarge = TextStyle( fontSize: 16, fontWeight: FontWeight.w400, height: 1.5, color: AppColors.textPrimary, ); static const TextStyle bodyMedium = TextStyle( fontSize: 14, fontWeight: FontWeight.w400, height: 1.5, color: AppColors.textPrimary, ); static const TextStyle bodySmall = TextStyle( fontSize: 12, fontWeight: FontWeight.w400, height: 1.5, color: AppColors.textSecondary, ); // ============================================================ // Label - 按钮文字/标签/Tab // ============================================================ static const TextStyle labelLarge = TextStyle( fontSize: 16, fontWeight: FontWeight.w600, height: 1.4, letterSpacing: 0.2, color: AppColors.textPrimary, ); static const TextStyle labelMedium = TextStyle( fontSize: 14, fontWeight: FontWeight.w500, height: 1.4, letterSpacing: 0.1, color: AppColors.textPrimary, ); static const TextStyle labelSmall = TextStyle( fontSize: 12, fontWeight: FontWeight.w500, height: 1.4, letterSpacing: 0.2, color: AppColors.textSecondary, ); // ============================================================ // Caption - 辅助文字 // ============================================================ static const TextStyle caption = TextStyle( fontSize: 11, fontWeight: FontWeight.w400, height: 1.4, color: AppColors.textTertiary, ); // ============================================================ // Price - 价格专用 // ============================================================ static const TextStyle priceLarge = TextStyle( fontSize: 28, fontWeight: FontWeight.w700, height: 1.2, color: AppColors.primary, ); static const TextStyle priceMedium = TextStyle( fontSize: 20, fontWeight: FontWeight.w700, height: 1.2, color: AppColors.primary, ); static const TextStyle priceSmall = TextStyle( fontSize: 16, fontWeight: FontWeight.w600, height: 1.2, color: AppColors.primary, ); static const TextStyle priceOriginal = TextStyle( fontSize: 13, fontWeight: FontWeight.w400, height: 1.2, color: AppColors.textTertiary, decoration: TextDecoration.lineThrough, ); // ============================================================ // Discount Badge - 折扣标签 // ============================================================ static const TextStyle discountBadge = TextStyle( fontSize: 12, fontWeight: FontWeight.w700, height: 1.0, color: Colors.white, ); }