From ca14bd99074f097fdffc8555ef99ef5c6f0eacef Mon Sep 17 00:00:00 2001 From: jwinterm Date: Sat, 16 May 2026 07:44:51 -0400 Subject: [PATCH 1/5] Linux: window title 'Cake Wallet' -> 'Hash Wallet' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GTK title bar (and non-header-bar fallback) were both hardcoded in linux/my_application.cc. User reported 'Cake Wallet' showing in the window decoration despite all the Dart-side display name changes — that string only exists in the C++ native shell. --- linux/my_application.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linux/my_application.cc b/linux/my_application.cc index 49f9ae13..34371144 100644 --- a/linux/my_application.cc +++ b/linux/my_application.cc @@ -40,11 +40,11 @@ static void my_application_activate(GApplication* application) { if (use_header_bar) { GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "Cake Wallet"); + gtk_header_bar_set_title(header_bar, "Hash Wallet"); gtk_header_bar_set_show_close_button(header_bar, TRUE); gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); } else { - gtk_window_set_title(window, "Cake Wallet"); + gtk_window_set_title(window, "Hash Wallet"); } if (getenv("DESKTOP_FORCE_MOBILE")) { gtk_window_set_default_size(window, 720, 1280); -- 2.50.1 (Apple Git-155) From 5531eb37c051d433c5e3360a0f8b22441f26428a Mon Sep 17 00:00:00 2001 From: jwinterm Date: Sat, 16 May 2026 07:58:01 -0400 Subject: [PATCH 2/5] Strip Cake-affiliate entries from Apps tab (Cake Pay, Cupcake, NanoGPT, dEuro) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User reported the Apps page still surfaced Cake Labs and Cake-affiliate third parties despite all the other rebrand work — they're hardcoded in lib/src/screens/dashboard/pages/cake_features_page.dart's _buildOldUi and _buildNewUi. - Cake Pay: Cake Labs' own gift-card product, already disabled via FeatureFlag.isCakePayEnabled but still rendered here - Cupcake: Cake's hardware wallet companion app - NanoGPT: third-party AI service with Cake affiliate revenue - dEuro Savings: Frankencoin savings, also affiliate Replaced both build methods with a simple 'No apps available yet' placeholder. Page structure / nav tab kept intact so we don't have to restructure the dashboard nav — can repopulate with Hash Wallet / Such Software apps later (e.g. Smirk, Wowcheckout, etc.). --- .../dashboard/pages/cake_features_page.dart | 118 +++--------------- 1 file changed, 19 insertions(+), 99 deletions(-) diff --git a/lib/src/screens/dashboard/pages/cake_features_page.dart b/lib/src/screens/dashboard/pages/cake_features_page.dart index b74ee87d..3259e2fa 100644 --- a/lib/src/screens/dashboard/pages/cake_features_page.dart +++ b/lib/src/screens/dashboard/pages/cake_features_page.dart @@ -81,107 +81,27 @@ class CakeFeaturesPage extends StatelessWidget { ); } - Widget _buildOldUi(BuildContext context) { - return Column( - children: [ - const SizedBox(height: 2), - DashBoardRoundedCardWidget( - shadowBlur: dashboardViewModel.getShadowBlur(), - shadowSpread: dashboardViewModel.getShadowSpread(), - onTap: () => _onCakePayTap(context), - title: 'Cake Pay', - subTitle: S.of(context).cake_pay_subtitle, - image: Image.asset('assets/images/cakepay.png', height: 74, width: 70, fit: BoxFit.cover), - ), - Observer(builder: (_) { - if (dashboardViewModel.type == WalletType.ethereum) { - return DashBoardRoundedCardWidget( - shadowBlur: dashboardViewModel.getShadowBlur(), - shadowSpread: dashboardViewModel.getShadowSpread(), - onTap: () => Navigator.of(context).pushNamed(Routes.dEuroSavings), - title: S.of(context).deuro_savings, - subTitle: S.of(context).deuro_savings_subtitle, - image: Image.asset('assets/images/deuro_icon.png', height: 80, width: 80, fit: BoxFit.cover), - ); - } - return const SizedBox(); - }), - DashBoardRoundedCardWidget( - shadowBlur: dashboardViewModel.getShadowBlur(), - shadowSpread: dashboardViewModel.getShadowSpread(), - onTap: () => _launchUrl("cake.nano-gpt.com"), - title: "NanoGPT", - subTitle: S.of(context).nanogpt_subtitle, - image: Image.asset('assets/images/nanogpt.png', height: 80, width: 80, fit: BoxFit.cover), - ), - const Spacer(), - const SizedBox(height: 125), - ], - ); - } + // Hash Wallet: gutted Cake Pay, Cupcake, NanoGPT, and dEuro Savings + // entries — all third-party Cake-affiliate income. dEuro kept out for + // consistency (also has affiliate revenue, not our relationship). + // Re-populate this page when we have Hash Wallet / Such Software apps + // to feature here. + Widget _buildOldUi(BuildContext context) => _emptyState(context); - Widget _buildNewUi(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Align( - alignment: Alignment.centerLeft, - child: Padding( - padding: const EdgeInsets.only(left: 24, bottom: 8), - child: CakeImageWidget(imageUrl: "assets/new-ui/by-cakelabs.svg", height: 20, color: Theme.of(context).colorScheme.onSurfaceVariant), - ), + Widget _buildNewUi(BuildContext context) => _emptyState(context); + + Widget _emptyState(BuildContext context) { + return Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 64), + child: Text( + 'No apps available yet.', + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyLarge?.copyWith( + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), ), - AppsWidget( - isWide: true, - isCake: true, - onTap: () => _onCakePayTap(context), - title: 'Cake Pay', - subTitle: S.of(context).cake_pay_subtitle, - image: 'assets/images/cakepay.png', - ), - AppsWidget( - isWide: true, - isLink: true, - isCake: true, - onTap: () => _launchUrl("cupcakewallet.com"), - title: "Cupcake", - subTitle: "Turn your old phone into your new hardware wallet with our new app", - image: 'assets/images/cupcake.png', - ), - const SizedBox(height: 12), - Padding( - padding: const EdgeInsets.only(left: 24, top: 16, bottom: 8), - child: Text( - "Featured Apps", - style: Theme.of(context).textTheme.headlineMedium?.copyWith( - fontWeight: FontWeight.w500, - color: Theme.of(context).colorScheme.onSurface, - ), - ), - ), - AppsWidget( - isWide: true, - isLink: true, - onTap: () => _launchUrl("cake.nano-gpt.com"), - title: "NanoGPT", - subTitle: S.of(context).nanogpt_subtitle, - image: 'assets/images/nanogpt.png', - ), - Observer(builder: (_) { - if (dashboardViewModel.type == WalletType.ethereum) { - return AppsWidget( - isWide: true, - onTap: () => Navigator.of(context).pushNamed(Routes.dEuroSavings), - title: S.of(context).deuro_savings, - subTitle: S.of(context).deuro_savings_subtitle, - image: 'assets/images/deuro_icon.png', - ); - } - return const SizedBox(); - }), - const Spacer(), - const SizedBox(height: 125), - ], + ), ); } -- 2.50.1 (Apple Git-155) From 78edfe0bb3befa08cd1f7636004b896453888455 Mon Sep 17 00:00:00 2001 From: jwinterm Date: Sat, 16 May 2026 08:06:12 -0400 Subject: [PATCH 3/5] Skip zcash node loading and migration step 55 (chain removed) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The zcash chain was removed (cw_zcash deleted, assets/zcash_node_list.yml deleted), but two places still tried to load it at runtime: 1. lib/entities/node_list.dart's resetToDefault() unconditionally called loadDefaultNodes(WalletType.zcash) which tried to read the deleted YAML. 2. lib/entities/default_settings_migration.dart migration step 55 called addWalletNodeList(type: WalletType.zcash) + _changeDefaultNode for zcash, same failure. Both surfaced as a 'Unable to load asset: assets/zcash_node_list.yml' error popup on every fresh wallet creation. Removing both call sites; migration step 55 becomes a no-op (existing wallets advance through it without effect). Also includes the new SVG variants added to assets/images/hash_wallet/: 03/04/05_*_dark.svg, 09_mark_outline.svg, 10_wordmark_only.svg, 11_vertical_lockup.svg, 12_notification_mono.svg — fills out the brand kit with dark-theme wordmarks plus tiny/outline/wordmark-only/vertical/ notification variants for cases the existing set didn't cover. --- .../images/hash_wallet/03_lockup_horizontal_dark.svg | 8 ++++++++ .../hash_wallet/04_hash_wallet_inline_dark.svg | 8 ++++++++ .../images/hash_wallet/05_function_lockup_dark.svg | 12 ++++++++++++ assets/images/hash_wallet/09_mark_outline.svg | 7 +++++++ assets/images/hash_wallet/10_wordmark_only.svg | 6 ++++++ assets/images/hash_wallet/11_vertical_lockup.svg | 8 ++++++++ assets/images/hash_wallet/12_notification_mono.svg | 6 ++++++ lib/entities/default_settings_migration.dart | 11 ++++------- 8 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 assets/images/hash_wallet/03_lockup_horizontal_dark.svg create mode 100644 assets/images/hash_wallet/04_hash_wallet_inline_dark.svg create mode 100644 assets/images/hash_wallet/05_function_lockup_dark.svg create mode 100644 assets/images/hash_wallet/09_mark_outline.svg create mode 100644 assets/images/hash_wallet/10_wordmark_only.svg create mode 100644 assets/images/hash_wallet/11_vertical_lockup.svg create mode 100644 assets/images/hash_wallet/12_notification_mono.svg diff --git a/assets/images/hash_wallet/03_lockup_horizontal_dark.svg b/assets/images/hash_wallet/03_lockup_horizontal_dark.svg new file mode 100644 index 00000000..61f28148 --- /dev/null +++ b/assets/images/hash_wallet/03_lockup_horizontal_dark.svg @@ -0,0 +1,8 @@ + + +Hash Wallet horizontal lockup (dark theme) +Hash Wallet logo with green-boxed hash mark on the left and a white wordmark to the right, intended for dark-theme backgrounds. + +# +Hash Wallet + diff --git a/assets/images/hash_wallet/04_hash_wallet_inline_dark.svg b/assets/images/hash_wallet/04_hash_wallet_inline_dark.svg new file mode 100644 index 00000000..8cbc2f8c --- /dev/null +++ b/assets/images/hash_wallet/04_hash_wallet_inline_dark.svg @@ -0,0 +1,8 @@ + + +#ash Wallet — inline lockup (dark theme) +Hash Wallet inline lockup spelling "#ash Wallet" with white text, intended for dark-theme backgrounds. + +# +ash Wallet + diff --git a/assets/images/hash_wallet/05_function_lockup_dark.svg b/assets/images/hash_wallet/05_function_lockup_dark.svg new file mode 100644 index 00000000..91159fd3 --- /dev/null +++ b/assets/images/hash_wallet/05_function_lockup_dark.svg @@ -0,0 +1,12 @@ + + +H(ash) = Wallet (dark theme) +Hash Wallet function-joke wordmark with green-boxed hash as the function name, light-on-dark variant. Punctuation/operators in mid-gray that reads on either background; argument and return in white. + +# +( +ash +) += +Wallet + diff --git a/assets/images/hash_wallet/09_mark_outline.svg b/assets/images/hash_wallet/09_mark_outline.svg new file mode 100644 index 00000000..59fe24f9 --- /dev/null +++ b/assets/images/hash_wallet/09_mark_outline.svg @@ -0,0 +1,7 @@ + + +Hash Wallet mark — outline +The Hash Wallet mark as a green outline + green hash, no fill. For monochrome UI surfaces and tiny sizes where the solid green box overwhelms. + +# + diff --git a/assets/images/hash_wallet/10_wordmark_only.svg b/assets/images/hash_wallet/10_wordmark_only.svg new file mode 100644 index 00000000..5a66d250 --- /dev/null +++ b/assets/images/hash_wallet/10_wordmark_only.svg @@ -0,0 +1,6 @@ + + +Hash Wallet wordmark +The Hash Wallet wordmark in mono, no mark — for headers, footers, or surfaces that already display the logo elsewhere. Uses currentColor so the consuming theme picks the tint. +Hash Wallet + diff --git a/assets/images/hash_wallet/11_vertical_lockup.svg b/assets/images/hash_wallet/11_vertical_lockup.svg new file mode 100644 index 00000000..2590083f --- /dev/null +++ b/assets/images/hash_wallet/11_vertical_lockup.svg @@ -0,0 +1,8 @@ + + +Hash Wallet vertical lockup +Hash Wallet logo with green-boxed hash mark on top, wordmark centered below — for splash screens, about screens, vertical-aspect surfaces. Wordmark uses currentColor for theme adaptability. + +# +Hash Wallet + diff --git a/assets/images/hash_wallet/12_notification_mono.svg b/assets/images/hash_wallet/12_notification_mono.svg new file mode 100644 index 00000000..9ad85dc9 --- /dev/null +++ b/assets/images/hash_wallet/12_notification_mono.svg @@ -0,0 +1,6 @@ + + +Hash Wallet notification mark +Single-color silhouette of the hash mark, no background, sized for Android notification tray (24x24 dp). Renders as white-on-system-tint per Android notification icon rules. +# + diff --git a/lib/entities/default_settings_migration.dart b/lib/entities/default_settings_migration.dart index df3977d0..b3a335ee 100644 --- a/lib/entities/default_settings_migration.dart +++ b/lib/entities/default_settings_migration.dart @@ -563,13 +563,10 @@ Future defaultSettingsMigration( await _backupWowneroSeeds(havenSeedStore); break; case 55: - await addWalletNodeList(nodes: nodes, type: WalletType.zcash); - await _changeDefaultNode( - nodes: nodes, - sharedPreferences: sharedPreferences, - type: WalletType.zcash, - currentNodePreferenceKey: PreferencesKey.currentZcashNodeIdKey, - ); + // Hash Wallet: zcash removed. The original migration here added + // zcash node list + set default zcash node. We no longer load + // zcash_node_list.yml (it was deleted), so skip the whole step. + break; case 56: await sharedPreferences.setString( PreferencesKey.syncStatusDisplayMode, SyncStatusDisplayMode.blocksRemaining.name); -- 2.50.1 (Apple Git-155) From 4805e5b1aa567deeac443b6f2b5d9ab721b520f7 Mon Sep 17 00:00:00 2001 From: jwinterm Date: Sat, 16 May 2026 08:06:44 -0400 Subject: [PATCH 4/5] Actually skip zcash in node_list.resetToDefault (previous commit missed this) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The companion to 78edfe0bb — that commit fixed the migration step 55 but the resetToDefault() in lib/entities/node_list.dart was still trying to loadDefaultNodes(WalletType.zcash) on every fresh wallet creation, which is exactly where the user's reported popup fires. --- lib/entities/node_list.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/entities/node_list.dart b/lib/entities/node_list.dart index bf4e0586..d9c59d3b 100644 --- a/lib/entities/node_list.dart +++ b/lib/entities/node_list.dart @@ -115,7 +115,9 @@ Future resetToDefault(Box nodeSource) async { final dogecoinElectrumServerList = await loadDefaultNodes(WalletType.dogecoin); final baseNodes = await loadDefaultNodes(WalletType.base); final arbitrumNodes = await loadDefaultNodes(WalletType.arbitrum); - final zcashNodes = await loadDefaultNodes(WalletType.zcash); + // Hash Wallet: zcash node list deleted with the chain. Skip the load, + // skip the concat — stops the first-launch popup "Unable to load asset: + // assets/zcash_node_list.yml". final bscNodes = await loadDefaultNodes(WalletType.bsc); final nodes = moneroNodes + @@ -133,7 +135,6 @@ Future resetToDefault(Box nodeSource) async { dogecoinElectrumServerList + baseNodes + arbitrumNodes + - zcashNodes + bscNodes; await nodeSource.clear(); -- 2.50.1 (Apple Git-155) From 59a6b25ff3bcccf6a1d2ae2f72511a46fb02b4ce Mon Sep 17 00:00:00 2001 From: jwinterm Date: Sat, 16 May 2026 10:34:53 -0400 Subject: [PATCH 5/5] Theme overhaul: green primary + Such Software pink/blue accents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- lib/palette.dart | 160 +++++++++--------- .../dark_theme_custom_colors.dart | 8 +- .../light_theme_custom_colors.dart | 18 +- lib/themes/theme_classes/black_theme.dart | 14 +- lib/themes/theme_classes/dark_theme.dart | 51 +++--- lib/themes/theme_classes/light_theme.dart | 43 ++--- 6 files changed, 155 insertions(+), 139 deletions(-) diff --git a/lib/palette.dart b/lib/palette.dart index eb0ff50e..474cb92e 100644 --- a/lib/palette.dart +++ b/lib/palette.dart @@ -4,15 +4,17 @@ class Palette { static const Color green = Color.fromRGBO(39, 206, 80, 1.0); static const Color red = Color.fromRGBO(255, 51, 51, 1.0); static const Color darkRed = Color.fromRGBO(205, 0, 0, 1.0); - static const Color blueAlice = Color.fromRGBO(229, 247, 255, 1.0); - static const Color lightBlue = Color.fromRGBO(172, 203, 238, 1.0); - static const Color lavender = Color.fromRGBO(237, 245, 252, 1.0); - static const Color oceanBlue = Color.fromRGBO(30, 52, 78, 1.0); - static const Color lightBlueGrey = Color.fromRGBO(118, 131, 169, 1.0); - static const Color periwinkle = Color.fromRGBO(195, 210, 227, 1.0); - static const Color blue = Color.fromRGBO(88, 143, 252, 1.0); - static const Color darkLavender = Color.fromRGBO(229, 238, 250, 1.0); - static const Color nightBlue = Color.fromRGBO(46, 57, 96, 1.0); + // Hash Wallet: Cake's blue-family accents repainted into the green-primary + // brand palette. Names retained so call-sites compile unchanged. + static const Color blueAlice = Color.fromRGBO(229, 247, 235, 1.0); // pale green tint + static const Color lightBlue = Color.fromRGBO(127, 202, 160, 1.0); // mint + static const Color lavender = Color.fromRGBO(242, 248, 244, 1.0); // very light minty + static const Color oceanBlue = Color.fromRGBO(11, 31, 20, 1.0); // deep brand green + static const Color lightBlueGrey = Color.fromRGBO(155, 181, 166, 1.0); // muted mint-gray + static const Color periwinkle = Color.fromRGBO(199, 229, 210, 1.0); // pale mint + static const Color blue = Color.fromRGBO(31, 125, 191, 1.0); // Such Software blue accent + static const Color darkLavender = Color.fromRGBO(234, 242, 236, 1.0); // pale green bg + static const Color nightBlue = Color.fromRGBO(26, 92, 56, 1.0); // brand green primary static const Color moderateOrangeYellow = Color.fromRGBO(245, 134, 82, 1.0); static const Color moderateOrange = Color.fromRGBO(235, 117, 63, 1.0); static const Color moneroOrange = Color.fromRGBO(255, 102, 0, 1.0); @@ -20,86 +22,90 @@ class Palette { static const Color bitcoinOrange = Color.fromRGBO(242, 169, 0, 1.0); static const Color shineGreen = Color.fromRGBO(76, 189, 87, 1.0); static const Color moderateGreen = Color.fromRGBO(45, 158, 56, 1.0); - static const Color cornflower = Color.fromRGBO(85, 147, 240, 1.0); - static const Color royalBlue = Color.fromRGBO(43, 114, 221, 1.0); + static const Color cornflower = Color.fromRGBO(106, 183, 230, 1.0); // soft Such blue + static const Color royalBlue = Color.fromRGBO(31, 125, 191, 1.0); // Such blue primary static const Color lightRed = Color.fromRGBO(227, 87, 87, 1.0); static const Color veryLightRed = Color.fromRGBO(239, 156, 156, 1.0); static const Color persianRed = Color.fromRGBO(206, 55, 55, 1.0); - static const Color blueCraiola = Color.fromRGBO(69, 110, 255, 1.0); - static const Color blueGreyCraiola = Color.fromRGBO(106, 177, 207, 1.0); - static const Color greyBlueCraiola = Color.fromRGBO(116, 139, 219, 1.0); - static const Color darkBlueCraiola = Color.fromRGBO(53, 86, 136, 1.0); - static const Color pinkFlamingo = Color.fromRGBO(240, 60, 243, 1.0); + static const Color blueCraiola = Color.fromRGBO(26, 92, 56, 1.0); // brand green primary + static const Color blueGreyCraiola = Color.fromRGBO(127, 202, 160, 1.0); // mint + static const Color greyBlueCraiola = Color.fromRGBO(155, 181, 166, 1.0); // muted mint-gray + static const Color darkBlueCraiola = Color.fromRGBO(11, 31, 20, 1.0); // deep green + static const Color pinkFlamingo = Color.fromRGBO(184, 50, 120, 1.0); // Such Software pink static const Color redHat = Color.fromRGBO(209, 68, 37, 1.0); static const Color shineOrange = Color.fromRGBO(255, 184, 78, 1.0); - static const Color paleBlue = Color.fromRGBO(225, 228, 233, 1.0); - static const Color violetBlue = Color.fromRGBO(56, 69, 103, 1.0); - static const Color periwinkleCraiola = Color.fromRGBO(229, 232, 242, 1.0); - static const Color moderatePurpleBlue = Color.fromRGBO(57, 74, 95, 1.0); - static const Color moderateLavender = Color.fromRGBO(233, 242, 252, 1.0); - static const Color wildLavender = Color.fromRGBO(224, 230, 246, 1.0); + static const Color paleBlue = Color.fromRGBO(217, 230, 222, 1.0); // pale green tint + static const Color violetBlue = Color.fromRGBO(31, 69, 48, 1.0); // darker green container + static const Color periwinkleCraiola = Color.fromRGBO(234, 242, 236, 1.0); + static const Color moderatePurpleBlue = Color.fromRGBO(31, 69, 48, 1.0); + static const Color moderateLavender = Color.fromRGBO(234, 242, 236, 1.0); + static const Color wildLavender = Color.fromRGBO(199, 229, 210, 1.0); static const Color gray = Color.fromRGBO(112, 147, 186, 1.0); - static const Color wildPeriwinkle = Color.fromRGBO(219, 227, 243, 1.0); + static const Color wildPeriwinkle = Color.fromRGBO(214, 234, 222, 1.0); static const Color darkGray = Color.fromRGBO(122, 147, 186, 1.0); - static const Color shadowWhite = Color.fromRGBO(242, 245, 255, 1.0); - static const Color niagara = Color.fromRGBO(152, 172, 201, 1.0); + static const Color shadowWhite = Color.fromRGBO(242, 248, 244, 1.0); // pale minty + static const Color niagara = Color.fromRGBO(155, 181, 166, 1.0); // mint-gray static const Color alizarinRed = Color.fromRGBO(233, 45, 45, 1.0); static const Color moderateSlateBlue = Color.fromRGBO(129, 93, 251, 1.0); static const Color brightOrange = Color.fromRGBO(255, 102, 0, 1.0); static const Color dullGray = Color.fromRGBO(98, 98, 98, 1.0); - static const Color protectiveBlue = Color.fromRGBO(33, 148, 255, 1.0); - static const Color darkBlue = Color.fromRGBO(109, 128, 178, 1.0); - static const Color paleCornflowerBlue = Color.fromRGBO(185, 196, 237, 1.0); - static const Color manatee = Color.fromRGBO(153, 161, 176, 1.0); - static const Color stateGray = Color.fromRGBO(68, 74, 89, 1.0); - static const Color highContrastGray = Color.fromRGBO(76, 76, 76, 1.0); - static const Color frostySky = Color.fromRGBO(0, 184, 250, 1.0); + static const Color protectiveBlue = Color.fromRGBO(31, 125, 191, 1.0); // Such blue + static const Color darkBlue = Color.fromRGBO(20, 80, 122, 1.0); // deeper Such blue + static const Color paleCornflowerBlue = Color.fromRGBO(214, 234, 246, 1.0); // pale Such blue + static const Color manatee = Color.fromRGBO(153, 161, 176, 1.0); // neutral gray (kept) + static const Color stateGray = Color.fromRGBO(68, 74, 89, 1.0); // neutral (kept) + static const Color highContrastGray = Color.fromRGBO(76, 76, 76, 1.0); // neutral (kept) + static const Color frostySky = Color.fromRGBO(127, 202, 160, 1.0); // mint } class PaletteDark { - static const Color lightDistantBlue = Color.fromRGBO(81, 96, 147, 1.0); - static const Color gray = Color.fromRGBO(140, 153, 201, 1.0); - static const Color pigeonBlue = Color.fromRGBO(91, 112, 146, 1.0); - static const Color moderateNightBlue = Color.fromRGBO(39, 53, 96, 1.0); - static const Color headerNightBlue = Color.fromRGBO(41, 52, 84, 1.0); - static const Color moderatePurpleBlue = Color.fromRGBO(57, 74, 95, 1.0); - static const Color backgroundColor = Color.fromRGBO(25, 35, 60, 1.0); - static const Color nightBlue = Color.fromRGBO(35, 47, 79, 1.0); - static const Color wildNightBlue = Color.fromRGBO(39, 53, 96, 1.0); - static const Color distantNightBlue = Color.fromRGBO(46, 57, 96, 1.0); - static const Color cyanBlue = Color.fromRGBO(99, 113, 150, 1.0); - static const Color darkCyanBlue = Color.fromRGBO(91, 112, 146, 1.0); - static const Color orangeYellow = Color.fromRGBO(243, 166, 50, 1.0); - static const Color brightGreen = Color.fromRGBO(88, 243, 50, 1.0); - static const Color oceanBlue = Color.fromRGBO(27, 39, 71, 1.0); - static const Color lightOceanBlue = Color.fromRGBO(32, 45, 80, 1.0); - static const Color lightNightBlue = Color.fromRGBO(39, 52, 89, 1.0); - static const Color wildBlue = Color.fromRGBO(165, 176, 205, 1.0); - static const Color buttonNightBlue = Color.fromRGBO(46, 57, 96, 1.0); - static const Color lightBlueGrey = Color.fromRGBO(125, 141, 183, 1.0); - static const Color lightVioletBlue = Color.fromRGBO(56, 71, 109, 1.0); - static const Color darkVioletBlue = Color.fromRGBO(49, 60, 96, 1.0); - static const Color wildVioletBlue = Color.fromRGBO(45, 60, 97, 1.0); - static const Color darkNightBlue = Color.fromRGBO(33, 45, 76, 1.0); - static const Color blueGrey = Color.fromRGBO(87, 98, 138, 1.0); - static const Color moderateBlue = Color.fromRGBO(60, 73, 118, 1.0); - static const Color deepPurpleBlue = Color.fromRGBO(19, 29, 56, 1.0); - static const Color darkOceanBlue = Color.fromRGBO(30, 42, 73, 1.0); - static const Color wildBlueGrey = Color.fromRGBO(125, 137, 182, 1.0); - static const Color darkGrey = Color.fromRGBO(118, 131, 169, 1.0); - static const Color dividerColor = Color.fromRGBO(48, 59, 95, 1.0); - static const Color violetBlue = Color.fromRGBO(59, 72, 119, 1.0); - static const Color distantBlue = Color.fromRGBO(72, 85, 131, 1.0); - static const Color moderateVioletBlue = Color.fromRGBO(62, 73, 113, 1.0); - static const Color deepVioletBlue = Color.fromRGBO(52, 66, 104, 1.0); - static const Color lightPurpleBlue = Color.fromRGBO(120, 133, 170, 1.0); - static const Color indicatorVioletBlue = Color.fromRGBO(59, 72, 119, 1.0); - static const Color granite = Color.fromRGBO(48, 51, 60, 1.0); - static const Color matrixGreen = Color.fromRGBO(18, 229, 90, 1.0); - static const Color moneroOrange = Color.fromRGBO(255, 102, 0, 1.0); - static const Color moneroCard = Color.fromRGBO(20, 21, 24, 1.0); - static const Color red = Color.fromRGBO(195, 0, 0, 1.0); - static const Color darkPurple = Color.fromRGBO(109, 14, 210, 1.0); - static const Color cakeBlue = Color.fromRGBO(0, 184, 250, 1.0); - static const Color darkBlue = Color.fromRGBO(0, 123, 168, 1.0); + // Hash Wallet: PaletteDark was almost entirely Cake's night-blue surfaces. + // Repainted into the deep-green dark theme. moneroCard and moneroOrange + // stay as chain identifiers. Original names retained — every call-site + // compiles unchanged. + static const Color lightDistantBlue = Color.fromRGBO(96, 147, 113, 1.0); + static const Color gray = Color.fromRGBO(155, 181, 166, 1.0); + static const Color pigeonBlue = Color.fromRGBO(91, 146, 112, 1.0); + static const Color moderateNightBlue = Color.fromRGBO(23, 53, 36, 1.0); + static const Color headerNightBlue = Color.fromRGBO(17, 42, 29, 1.0); + static const Color moderatePurpleBlue = Color.fromRGBO(31, 69, 48, 1.0); + static const Color backgroundColor = Color.fromRGBO(11, 31, 20, 1.0); + static const Color nightBlue = Color.fromRGBO(17, 42, 29, 1.0); + static const Color wildNightBlue = Color.fromRGBO(23, 53, 36, 1.0); + static const Color distantNightBlue = Color.fromRGBO(31, 69, 48, 1.0); + static const Color cyanBlue = Color.fromRGBO(113, 150, 128, 1.0); + static const Color darkCyanBlue = Color.fromRGBO(91, 146, 112, 1.0); + static const Color orangeYellow = Color.fromRGBO(243, 166, 50, 1.0); // neutral accent (kept) + static const Color brightGreen = Color.fromRGBO(88, 243, 130, 1.0); // tweaked for brand harmony + static const Color oceanBlue = Color.fromRGBO(11, 31, 20, 1.0); + static const Color lightOceanBlue = Color.fromRGBO(17, 42, 29, 1.0); + static const Color lightNightBlue = Color.fromRGBO(23, 53, 36, 1.0); + static const Color wildBlue = Color.fromRGBO(176, 205, 188, 1.0); + static const Color buttonNightBlue = Color.fromRGBO(31, 69, 48, 1.0); + static const Color lightBlueGrey = Color.fromRGBO(141, 183, 159, 1.0); + static const Color lightVioletBlue = Color.fromRGBO(42, 88, 64, 1.0); + static const Color darkVioletBlue = Color.fromRGBO(31, 69, 48, 1.0); + static const Color wildVioletBlue = Color.fromRGBO(35, 75, 52, 1.0); + static const Color darkNightBlue = Color.fromRGBO(17, 42, 29, 1.0); + static const Color blueGrey = Color.fromRGBO(98, 138, 113, 1.0); + static const Color moderateBlue = Color.fromRGBO(60, 118, 88, 1.0); + static const Color deepPurpleBlue = Color.fromRGBO(11, 31, 20, 1.0); + static const Color darkOceanBlue = Color.fromRGBO(17, 42, 29, 1.0); + static const Color wildBlueGrey = Color.fromRGBO(137, 182, 156, 1.0); + static const Color darkGrey = Color.fromRGBO(131, 169, 148, 1.0); + static const Color dividerColor = Color.fromRGBO(31, 69, 48, 1.0); + static const Color violetBlue = Color.fromRGBO(42, 88, 64, 1.0); + static const Color distantBlue = Color.fromRGBO(85, 131, 105, 1.0); + static const Color moderateVioletBlue = Color.fromRGBO(62, 113, 84, 1.0); + static const Color deepVioletBlue = Color.fromRGBO(52, 104, 75, 1.0); + static const Color lightPurpleBlue = Color.fromRGBO(133, 170, 149, 1.0); + static const Color indicatorVioletBlue = Color.fromRGBO(42, 88, 64, 1.0); + static const Color granite = Color.fromRGBO(48, 51, 60, 1.0); // neutral (kept) + static const Color matrixGreen = Color.fromRGBO(18, 229, 90, 1.0); // matrix accent (kept) + static const Color moneroOrange = Color.fromRGBO(255, 102, 0, 1.0); // chain identifier (kept) + static const Color moneroCard = Color.fromRGBO(20, 21, 24, 1.0); // chain card (kept) + static const Color red = Color.fromRGBO(195, 0, 0, 1.0); // neutral (kept) + static const Color darkPurple = Color.fromRGBO(184, 50, 120, 1.0); // Such Software pink + static const Color cakeBlue = Color.fromRGBO(106, 183, 230, 1.0); // Such Software blue + static const Color darkBlue = Color.fromRGBO(31, 125, 191, 1.0); // Such Software blue darker } diff --git a/lib/themes/custom_theme_colors/dark_theme_custom_colors.dart b/lib/themes/custom_theme_colors/dark_theme_custom_colors.dart index d8975bbe..62c97273 100644 --- a/lib/themes/custom_theme_colors/dark_theme_custom_colors.dart +++ b/lib/themes/custom_theme_colors/dark_theme_custom_colors.dart @@ -12,17 +12,17 @@ class DarkThemeCustomColors extends CustomThemeColors { Color get backgroundMainColor => const Color(0xFF000000); @override - Color get backgroundGradientColor => const Color(0xFF0F1A36); + Color get backgroundGradientColor => const Color(0xFF06150C); @override - Color get cardGradientColorPrimary => const Color(0xFF2B3A67); + Color get cardGradientColorPrimary => const Color(0xFF1F4530); @override - Color get cardGradientColorSecondary => const Color(0xFF1C2A4F); + Color get cardGradientColorSecondary => const Color(0xFF112A1D); @override Color get toggleKnobStateColor => const Color(0xFFFFFFFF); @override - Color get toggleColorOffState => const Color(0xFF3A4F88); + Color get toggleColorOffState => const Color(0xFF2A5840); } diff --git a/lib/themes/custom_theme_colors/light_theme_custom_colors.dart b/lib/themes/custom_theme_colors/light_theme_custom_colors.dart index 98fb1f15..e57b1022 100644 --- a/lib/themes/custom_theme_colors/light_theme_custom_colors.dart +++ b/lib/themes/custom_theme_colors/light_theme_custom_colors.dart @@ -9,20 +9,20 @@ class LightThemeCustomColors extends CustomThemeColors { Color get warningOutlineColor => const Color(0xFF312938); @override - Color get backgroundMainColor => const Color(0xFF000000); - + Color get backgroundMainColor => const Color(0xFF0B1F14); + @override - Color get backgroundGradientColor => const Color(0xFFE7E7FD); - + Color get backgroundGradientColor => const Color(0xFFDDEBE3); + @override Color get cardGradientColorPrimary => const Color(0xFFFFFFFF); - + @override - Color get cardGradientColorSecondary => const Color(0xFFF3F3FF); - + Color get cardGradientColorSecondary => const Color(0xFFEAF2EC); + @override Color get toggleKnobStateColor => const Color(0xFFFFFFFF); - + @override - Color get toggleColorOffState => const Color(0xFFCACAE7); + Color get toggleColorOffState => const Color(0xFFC7E5D2); } diff --git a/lib/themes/theme_classes/black_theme.dart b/lib/themes/theme_classes/black_theme.dart index ba181fc9..9285c775 100644 --- a/lib/themes/theme_classes/black_theme.dart +++ b/lib/themes/theme_classes/black_theme.dart @@ -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 diff --git a/lib/themes/theme_classes/dark_theme.dart b/lib/themes/theme_classes/dark_theme.dart index 990508e3..d9b31e97 100644 --- a/lib/themes/theme_classes/dark_theme.dart +++ b/lib/themes/theme_classes/dark_theme.dart @@ -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 diff --git a/lib/themes/theme_classes/light_theme.dart b/lib/themes/theme_classes/light_theme.dart index db1b6fdc..37b4b25d 100644 --- a/lib/themes/theme_classes/light_theme.dart +++ b/lib/themes/theme_classes/light_theme.dart @@ -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 -- 2.50.1 (Apple Git-155)