import 'package:flutter/material.dart'; /// Brand palette lifted from konfi-castle.com (Kubio theme CSS custom /// properties: --kubio-color-1..6) so the app's look leans on the same /// identity as the marketing site instead of Flutter's default Material /// purple. abstract final class KcColors { static const blue = Color(0xFF2F7CFF); // --kubio-color-1 static const orange = Color(0xFFF17C20); // --kubio-color-2 static const teal = Color(0xFF4EBA9A); // --kubio-color-3 static const slate = Color(0xFF69768B); // --kubio-color-4 static const navy = Color(0xFF2B2D42); // --kubio-color-6 (headings/text) static const surface = Color(0xFFF7F9FC); } ThemeData buildKcTheme() { final colorScheme = ColorScheme.fromSeed( seedColor: KcColors.blue, brightness: Brightness.light, ).copyWith( primary: KcColors.blue, secondary: KcColors.orange, tertiary: KcColors.teal, surface: KcColors.surface, onSurface: KcColors.navy, ); return ThemeData( useMaterial3: true, colorScheme: colorScheme, scaffoldBackgroundColor: KcColors.surface, appBarTheme: AppBarTheme( backgroundColor: KcColors.surface, foregroundColor: KcColors.navy, elevation: 0, centerTitle: false, titleTextStyle: const TextStyle( color: KcColors.navy, fontSize: 20, fontWeight: FontWeight.w700, ), ), cardTheme: CardThemeData( elevation: 0, color: Colors.white, surfaceTintColor: Colors.transparent, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), side: BorderSide(color: KcColors.navy.withValues(alpha: 0.06)), ), ), inputDecorationTheme: InputDecorationTheme( filled: true, fillColor: KcColors.surface, border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide.none, ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: const BorderSide(color: KcColors.blue, width: 1.5), ), contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), ), filledButtonTheme: FilledButtonThemeData( style: FilledButton.styleFrom( backgroundColor: KcColors.blue, foregroundColor: Colors.white, minimumSize: const Size.fromHeight(50), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), textStyle: const TextStyle(fontWeight: FontWeight.w600, fontSize: 15), ), ), outlinedButtonTheme: OutlinedButtonThemeData( style: OutlinedButton.styleFrom( foregroundColor: KcColors.blue, side: const BorderSide(color: KcColors.blue), minimumSize: const Size.fromHeight(46), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), ), ), segmentedButtonTheme: SegmentedButtonThemeData( style: SegmentedButton.styleFrom( selectedBackgroundColor: KcColors.blue, selectedForegroundColor: Colors.white, foregroundColor: KcColors.navy, side: BorderSide(color: KcColors.navy.withValues(alpha: 0.15)), ), ), textTheme: const TextTheme( titleLarge: TextStyle(color: KcColors.navy, fontWeight: FontWeight.w700), titleMedium: TextStyle(color: KcColors.navy, fontWeight: FontWeight.w600), bodyMedium: TextStyle(color: KcColors.navy), bodySmall: TextStyle(color: KcColors.slate), labelMedium: TextStyle(color: KcColors.slate), ), dividerTheme: DividerThemeData(color: KcColors.navy.withValues(alpha: 0.08)), ); }