Theme overhaul: green primary + Such Software pink/blue accents

Tier A (theme classes):
- light_theme.dart: primary #1A5C38 (Hash green), secondary #B83278 (Such
  pink), tertiary #1F7DBF (Such blue), surface #F2F8F4 (very light minty).
  Full ColorScheme rewritten with green-family containers and green-tinted
  surface tokens.
- dark_theme.dart: primary #7FCAA0 (mint, readable on dark), secondary
  #E16FA6 (soft pink), tertiary #6AB7E6 (soft blue), surface #0B1F14
  (deep green). Containers + surface tokens tuned for the green palette.
- black_theme.dart: replaced accent enum (cakePrimary/tronRed/frostingPurple
  removed; hashGreen, suchPink, suchBlue added). bchGreen / bitcoinYellow /
  moneroOrange kept as chain identifiers.

Tier A (custom theme colors):
- light_theme_custom_colors.dart: backgroundGradient + cardGradient +
  toggleColorOffState retuned to green tints.
- dark_theme_custom_colors.dart: same for the dark variant.
- black_theme_custom_colors.dart: untouched (pure black AMOLED is brand-
  neutral on purpose).

Tier B (palette.dart):
- Cake's blue-family accents (Palette.blue, royalBlue, cornflower,
  blueCraiola family, pinkFlamingo, lavenders, oceanBlue, nightBlue,
  protectiveBlue, etc.) repainted into the green/pink/blue brand system.
- PaletteDark's night-blue surfaces wholesale repainted into deep-green
  equivalents. Original const names retained so every call-site compiles
  unchanged.
- moneroOrange, moneroLightOrange, bitcoinOrange, moneroCard, BCH green
  intentionally NOT touched — chain identifiers.
- Pure neutrals (gray, darkGray, manatee, dullGray, highContrastGray,
  shadowWhite, stateGray, granite, matrixGreen, red, error reds) kept.

Tier C deferred — hardcoded Color(0xFF...) literals scattered through
lib/ remain blue. Most should pull from ColorScheme so this should be
~80% visually rebranded already; iterate from screenshots.
This commit is contained in:
jwinterm
2026-05-16 10:34:53 -04:00
parent 4805e5b1aa
commit 59a6b25ff3
6 changed files with 155 additions and 139 deletions
+7 -7
View File
@@ -4,12 +4,12 @@ import 'package:cake_wallet/themes/core/custom_theme_colors.dart';
import 'package:cake_wallet/themes/custom_theme_colors/black_theme_custom_colors.dart';
enum BlackThemeAccentColor implements ThemeAccentColor {
cakePrimary(Color(0xFF52B6F0), 'Cake Primary'),
hashGreen(Color(0xFF7FCAA0), 'Hash Green'),
suchPink(Color(0xFFE16FA6), 'Such Pink'),
suchBlue(Color(0xFF6AB7E6), 'Such Blue'),
bchGreen(Color(0xFF44BA52), 'BCH Green'),
bitcoinYellow(Color(0xFFFFC107), 'Bitcoin Yellow'),
moneroOrange(Color(0xFFFF6600), 'Monero Orange'),
tronRed(Color(0xFFFF4242), 'Tron Red'),
frostingPurple(Color(0xFFBABAF3), 'Frosting Purple');
moneroOrange(Color(0xFFFF6600), 'Monero Orange');
const BlackThemeAccentColor(this.color, this.name);
@@ -263,12 +263,12 @@ class BlackTheme extends MaterialThemeBase {
@override
int get raw {
final baseValue = switch (accentColor) {
BlackThemeAccentColor.cakePrimary => 12,
BlackThemeAccentColor.hashGreen => 12,
BlackThemeAccentColor.bchGreen => 13,
BlackThemeAccentColor.bitcoinYellow => 14,
BlackThemeAccentColor.moneroOrange => 15,
BlackThemeAccentColor.tronRed => 16,
BlackThemeAccentColor.frostingPurple => 17,
BlackThemeAccentColor.suchPink => 16,
BlackThemeAccentColor.suchBlue => 17,
};
if (!isOled) return baseValue;
// OLED encodes as 100 + base to avoid collisions
+28 -23
View File
@@ -10,50 +10,55 @@ class DarkTheme extends MaterialThemeBase {
@override
ThemeMode get themeMode => ThemeMode.dark;
// Hash Wallet dark palette:
// - Primary: mint (#7FCAA0) — light enough to read on dark surface
// - Secondary: soft pink (#E16FA6)
// - Tertiary: soft blue (#6AB7E6)
// - Surface: deep green (#0B1F14)
@override
Color get primaryColor => const Color(0xFF91B0FF);
Color get primaryColor => const Color(0xFF7FCAA0);
@override
Color get secondaryColor => const Color(0xFFA1B9FF);
Color get secondaryColor => const Color(0xFFE16FA6);
@override
Color get errorColor => const Color(0xFFFFB4AB);
@override
Color get surfaceColor => const Color(0xFF1B284A);
Color get surfaceColor => const Color(0xFF0B1F14);
@override
Color get tertiaryColor => const Color(0xFF162028);
Color get tertiaryColor => const Color(0xFF6AB7E6);
@override
ColorScheme get colorScheme => ColorScheme.dark(
primary: primaryColor,
onPrimary: const Color(0xFF002860),
primaryContainer: const Color(0xFF004C9E),
onPrimaryContainer: const Color(0xFFFFF3F0),
onPrimary: const Color(0xFF0B1F14),
primaryContainer: const Color(0xFF1A5C38),
onPrimaryContainer: const Color(0xFFC7E5D2),
secondary: secondaryColor,
onSecondary: const Color(0xFF0C1C58),
secondaryContainer: const Color(0xFF1A3C6C),
onSecondaryContainer: const Color(0xFFBACBFF),
onSecondary: const Color(0xFF3A0F22),
secondaryContainer: const Color(0xFF7A1F4E),
onSecondaryContainer: const Color(0xFFFAD5E5),
tertiary: tertiaryColor,
onTertiary: const Color(0xFF2B373F),
tertiaryContainer: const Color(0xFF1F2832),
onTertiaryContainer: const Color(0xFFA8B3C6),
onTertiary: const Color(0xFF0B2C46),
tertiaryContainer: const Color(0xFF14507A),
onTertiaryContainer: const Color(0xFFD6EAF6),
error: errorColor,
onError: const Color(0xFFB71919),
errorContainer: const Color(0xFFC53636),
onErrorContainer: const Color(0xFFFFDAD6),
surface: surfaceColor,
onSurface: const Color(0xFFD7E2F7),
surfaceDim: const Color(0xFF0F1A36),
onSurfaceVariant: const Color(0xFF8C9FBB),
surfaceContainerLowest: Color(0xFF171C30),
surfaceContainerLow: Color(0xFF2D385C),
surfaceContainer: Color(0xFF24335B),
surfaceContainerHigh: Color(0xFF2A3E73),
surfaceContainerHighest: Color(0xFF334C8C),
outline: const Color(0xFF9EACC1),
outlineVariant: const Color(0xFF2A3E73),
onSurface: const Color(0xFFE0F0E8),
surfaceDim: const Color(0xFF06150C),
onSurfaceVariant: const Color(0xFF9BB5A6),
surfaceContainerLowest: Color(0xFF06150C),
surfaceContainerLow: Color(0xFF112A1D),
surfaceContainer: Color(0xFF173524),
surfaceContainerHigh: Color(0xFF1F4530),
surfaceContainerHighest: Color(0xFF2A5840),
outline: const Color(0xFF8AAA98),
outlineVariant: const Color(0xFF1F4530),
);
static const String fontFamily = 'Wix Madefor Text';
@override
+24 -19
View File
@@ -10,51 +10,56 @@ class LightTheme extends MaterialThemeBase {
@override
ThemeMode get themeMode => ThemeMode.light;
// Hash Wallet palette:
// - Primary: brand green (#1A5C38)
// - Secondary: Such Software pink (#B83278)
// - Tertiary: Such Software blue (#1F7DBF)
// - Surface: very light minty bg (#F2F8F4)
@override
Color get primaryColor => const Color(0xFF4EBEFF);
Color get primaryColor => const Color(0xFF1A5C38);
@override
Color get secondaryColor => const Color(0xFF625C64);
Color get secondaryColor => const Color(0xFFB83278);
@override
Color get tertiaryColor => const Color(0xFFBFCBDE);
Color get tertiaryColor => const Color(0xFF1F7DBF);
@override
Color get errorColor => const Color(0xFFBA1A1A);
@override
Color get surfaceColor => const Color(0xFFEFEFF8);
Color get surfaceColor => const Color(0xFFF2F8F4);
@override
ColorScheme get colorScheme => ColorScheme.light(
primary: primaryColor,
onPrimary: const Color(0xFFFFFFFF),
primaryContainer: const Color(0xFF403747),
onPrimaryContainer: const Color(0xFFD5C8DC),
primaryContainer: const Color(0xFFC7E5D2),
onPrimaryContainer: const Color(0xFF0B1F14),
secondary: secondaryColor,
onSecondary: const Color(0xFFFFFFFF),
secondaryContainer: const Color(0xFFE1E4EA),
onSecondaryContainer: const Color(0xFF4C474E),
secondaryContainer: const Color(0xFFF9D6E5),
onSecondaryContainer: const Color(0xFF4A0E2C),
tertiary: tertiaryColor,
onTertiary: const Color(0xFFFFFFFF),
tertiaryContainer: const Color(0xFF35404A),
onTertiaryContainer: const Color(0xFFC5D7E5),
tertiaryContainer: const Color(0xFFD6EAF6),
onTertiaryContainer: const Color(0xFF0B2C46),
error: errorColor,
onError: const Color(0xFFFFFFFF),
errorContainer: const Color(0xFFFFBDBD),
onErrorContainer: const Color(0xFFE43D3D),
surface: surfaceColor,
surfaceDim: const Color(0xFFE7E7FD),
onSurface: const Color(0xFF312938),
onSurfaceVariant: const Color(0xFF6C6772),
surfaceContainerLowest: Color(0xFFE4E4E4),
surfaceContainerLow: Color(0xFFECECED),
surfaceContainer: Color(0xFFFBFBFD),
surfaceContainerHigh: Color(0xFFFDFDFE),
surfaceDim: const Color(0xFFDDEBE3),
onSurface: const Color(0xFF0B1F14),
onSurfaceVariant: const Color(0xFF5A6B61),
surfaceContainerLowest: Color(0xFFE2EEE7),
surfaceContainerLow: Color(0xFFEAF2EC),
surfaceContainer: Color(0xFFF5FAF6),
surfaceContainerHigh: Color(0xFFFAFDFB),
surfaceContainerHighest: Color(0xFFFFFFFF),
onInverseSurface: Color(0xFFFAFAFA),
outline: const Color(0xFF7B757C),
outlineVariant: const Color(0xFFEDEDF6),
outline: const Color(0xFF6F857A),
outlineVariant: const Color(0xFFD9E6DE),
);
@override