Update Saqel Platform: 2026-08-31 01:52:23
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Apple Luxury Palette & Brand Tokens for Saqel Platform
|
||||
class AppColors {
|
||||
AppColors._();
|
||||
|
||||
// Dark OLED Palette
|
||||
static const Color darkBackground = Color(0xFF06090F);
|
||||
static const Color darkSurface = Color(0xFF0D111A);
|
||||
static const Color darkCard = Color(0xFF131A26);
|
||||
static const Color darkCardBorder = Color(0x1FFFFFFF);
|
||||
|
||||
// Light Palette
|
||||
static const Color lightBackground = Color(0xFFF8FAFC);
|
||||
static const Color lightSurface = Color(0xFFFFFFFF);
|
||||
static const Color lightCard = Color(0xFFF1F5F9);
|
||||
static const Color lightCardBorder = Color(0x0F000000);
|
||||
|
||||
// Accent Colors
|
||||
static const Color appleBlue = Color(0xFF0071E3);
|
||||
static const Color saqelCyan = Color(0xFF00F5D4);
|
||||
static const Color guardianAmber = Color(0xFFF59E0B);
|
||||
static const Color teacherEmerald = Color(0xFF10B981);
|
||||
static const Color adminViolet = Color(0xFF8B5CF6);
|
||||
static const Color whatsappGreen = Color(0xFF25D366);
|
||||
static const Color errorRed = Color(0xFFEF4444);
|
||||
|
||||
// Text Colors
|
||||
static const Color textPrimaryDark = Color(0xFFF8FAFC);
|
||||
static const Color textSecondaryDark = Color(0xFF94A3B8);
|
||||
static const Color textMutedDark = Color(0xFF64748B);
|
||||
|
||||
static const Color textPrimaryLight = Color(0xFF0F172A);
|
||||
static const Color textSecondaryLight = Color(0xFF475569);
|
||||
static const Color textMutedLight = Color(0xFF94A3B8);
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'app_colors.dart';
|
||||
|
||||
/// Apple Official San Francisco & SF Arabic Typography Standards
|
||||
class AppTypography {
|
||||
AppTypography._();
|
||||
|
||||
static const String primaryFont = '-apple-system';
|
||||
static const List<String> fallbackFonts = [
|
||||
'SF Pro Display',
|
||||
'SF Pro Text',
|
||||
'SF Arabic',
|
||||
'Geeza Pro',
|
||||
'Cairo',
|
||||
'system-ui',
|
||||
];
|
||||
|
||||
static const TextStyle displayLarge = TextStyle(
|
||||
fontFamily: primaryFont,
|
||||
fontFamilyFallback: fallbackFonts,
|
||||
fontSize: 28,
|
||||
fontWeight: FontWeight.w800,
|
||||
letterSpacing: -0.5,
|
||||
);
|
||||
|
||||
static const TextStyle headlineMedium = TextStyle(
|
||||
fontFamily: primaryFont,
|
||||
fontFamilyFallback: fallbackFonts,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: -0.3,
|
||||
);
|
||||
|
||||
static const TextStyle titleMedium = TextStyle(
|
||||
fontFamily: primaryFont,
|
||||
fontFamilyFallback: fallbackFonts,
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w600,
|
||||
letterSpacing: -0.2,
|
||||
);
|
||||
|
||||
static const TextStyle bodyMedium = TextStyle(
|
||||
fontFamily: primaryFont,
|
||||
fontFamilyFallback: fallbackFonts,
|
||||
fontSize: 13.5,
|
||||
fontWeight: FontWeight.w400,
|
||||
height: 1.5,
|
||||
);
|
||||
|
||||
static const TextStyle labelSmall = TextStyle(
|
||||
fontFamily: primaryFont,
|
||||
fontFamilyFallback: fallbackFonts,
|
||||
fontSize: 11,
|
||||
fontWeight: FontWeight.w600,
|
||||
);
|
||||
}
|
||||
|
||||
/// Official Apple Dark & Light Theme Factory
|
||||
class AppTheme {
|
||||
AppTheme._();
|
||||
|
||||
static ThemeData get darkTheme {
|
||||
return ThemeData(
|
||||
brightness: Brightness.dark,
|
||||
scaffoldBackgroundColor: AppColors.darkBackground,
|
||||
fontFamily: AppTypography.primaryFont,
|
||||
fontFamilyFallback: AppTypography.fallbackFonts,
|
||||
colorScheme: const ColorScheme.dark(
|
||||
primary: AppColors.appleBlue,
|
||||
secondary: AppColors.saqelCyan,
|
||||
surface: AppColors.darkSurface,
|
||||
error: AppColors.errorRed,
|
||||
),
|
||||
cardTheme: CardThemeData(
|
||||
color: AppColors.darkCard,
|
||||
elevation: 0,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
side: const BorderSide(color: AppColors.darkCardBorder),
|
||||
),
|
||||
),
|
||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: AppColors.appleBlue,
|
||||
foregroundColor: Colors.white,
|
||||
elevation: 0,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 15),
|
||||
textStyle: AppTypography.titleMedium.copyWith(color: Colors.white),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
static ThemeData get lightTheme {
|
||||
return ThemeData(
|
||||
brightness: Brightness.light,
|
||||
scaffoldBackgroundColor: AppColors.lightBackground,
|
||||
fontFamily: AppTypography.primaryFont,
|
||||
fontFamilyFallback: AppTypography.fallbackFonts,
|
||||
colorScheme: const ColorScheme.light(
|
||||
primary: AppColors.appleBlue,
|
||||
secondary: AppColors.saqelCyan,
|
||||
surface: AppColors.lightSurface,
|
||||
error: AppColors.errorRed,
|
||||
),
|
||||
cardTheme: CardThemeData(
|
||||
color: AppColors.lightCard,
|
||||
elevation: 0,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
side: const BorderSide(color: AppColors.lightCardBorder),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user