dev #5
8
assets/images/hash_wallet/03_lockup_horizontal_dark.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 100" width="360" height="100">
|
||||
<title>Hash Wallet horizontal lockup (dark theme)</title>
|
||||
<desc>Hash Wallet logo with green-boxed hash mark on the left and a white wordmark to the right, intended for dark-theme backgrounds.</desc>
|
||||
<rect x="10" y="18" width="64" height="64" rx="14" fill="#1a5c38"/>
|
||||
<text x="42" y="68" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="48" font-weight="700" fill="#ffffff" text-anchor="middle">#</text>
|
||||
<text x="90" y="63" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="32" font-weight="500" fill="#ffffff">Hash Wallet</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 728 B |
8
assets/images/hash_wallet/04_hash_wallet_inline_dark.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 380 80" width="380" height="80">
|
||||
<title>#ash Wallet — inline lockup (dark theme)</title>
|
||||
<desc>Hash Wallet inline lockup spelling "#ash Wallet" with white text, intended for dark-theme backgrounds.</desc>
|
||||
<rect x="6" y="14" width="52" height="52" rx="11" fill="#1a5c38"/>
|
||||
<text x="32" y="55" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="40" font-weight="700" fill="#ffffff" text-anchor="middle">#</text>
|
||||
<text x="68" y="55" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="42" font-weight="500" fill="#ffffff">ash Wallet</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 699 B |
12
assets/images/hash_wallet/05_function_lockup_dark.svg
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 80" width="500" height="80">
|
||||
<title>H(ash) = Wallet (dark theme)</title>
|
||||
<desc>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.</desc>
|
||||
<rect x="6" y="14" width="52" height="52" rx="11" fill="#1a5c38"/>
|
||||
<text x="32" y="55" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="40" font-weight="700" fill="#ffffff" text-anchor="middle">#</text>
|
||||
<text x="68" y="55" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="40" font-weight="400" fill="#aaa">(</text>
|
||||
<text x="88" y="55" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="40" font-weight="500" fill="#ffffff">ash</text>
|
||||
<text x="158" y="55" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="40" font-weight="400" fill="#aaa">)</text>
|
||||
<text x="186" y="55" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="40" font-weight="400" fill="#aaa">=</text>
|
||||
<text x="218" y="55" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="40" font-weight="500" fill="#7fcaa0">Wallet</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
7
assets/images/hash_wallet/09_mark_outline.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100" height="100">
|
||||
<title>Hash Wallet mark — outline</title>
|
||||
<desc>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.</desc>
|
||||
<rect x="4" y="4" width="92" height="92" rx="20" fill="none" stroke="#1a5c38" stroke-width="6"/>
|
||||
<text x="50" y="76" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="74" font-weight="700" fill="#1a5c38" text-anchor="middle">#</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 600 B |
6
assets/images/hash_wallet/10_wordmark_only.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 280 60" width="280" height="60">
|
||||
<title>Hash Wallet wordmark</title>
|
||||
<desc>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.</desc>
|
||||
<text x="0" y="44" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="36" font-weight="500" fill="currentColor">Hash Wallet</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 521 B |
8
assets/images/hash_wallet/11_vertical_lockup.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 240" width="200" height="240">
|
||||
<title>Hash Wallet vertical lockup</title>
|
||||
<desc>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.</desc>
|
||||
<rect x="50" y="20" width="100" height="100" rx="22" fill="#1a5c38"/>
|
||||
<text x="100" y="96" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="74" font-weight="700" fill="#ffffff" text-anchor="middle">#</text>
|
||||
<text x="100" y="180" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="28" font-weight="500" fill="currentColor" text-anchor="middle">Hash Wallet</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 808 B |
6
assets/images/hash_wallet/12_notification_mono.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
||||
<title>Hash Wallet notification mark</title>
|
||||
<desc>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.</desc>
|
||||
<text x="12" y="20" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="22" font-weight="700" fill="currentColor" text-anchor="middle">#</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 536 B |
@@ -563,13 +563,10 @@ Future<void> 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);
|
||||
|
||||
@@ -115,7 +115,9 @@ Future<void> resetToDefault(Box<Node> 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<void> resetToDefault(Box<Node> nodeSource) async {
|
||||
dogecoinElectrumServerList +
|
||||
baseNodes +
|
||||
arbitrumNodes +
|
||||
zcashNodes +
|
||||
bscNodes;
|
||||
|
||||
await nodeSource.clear();
|
||||
|
||||
160
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
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||