libby055404 commited on
Commit
5ae9a7f
·
verified ·
1 Parent(s): c215d9e

make the downloaded fikes for electrum be accesible download please - Follow Up Deployment

Browse files
Files changed (1) hide show
  1. index.html +500 -211
index.html CHANGED
@@ -3,176 +3,256 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Secure Bitcoin Wallet Scanner</title>
7
  <script src="https://cdn.tailwindcss.com"></script>
8
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
  <style>
10
- .gradient-bg {
11
- background: linear-gradient(135deg, #1e3a8a 0%, #0f172a 100%);
 
 
 
12
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  .wallet-card {
14
- transition: all 0.3s ease;
 
15
  }
 
16
  .wallet-card:hover {
17
- transform: translateY(-5px);
18
- box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
 
 
 
 
19
  }
20
- .progress-bar {
21
- height: 6px;
22
- border-radius: 3px;
23
- background-color: #e2e8f0;
24
- overflow: hidden;
 
 
 
 
 
 
25
  }
26
- .progress-fill {
27
- height: 100%;
28
- border-radius: 3px;
29
- background: linear-gradient(90deg, #3b82f6 0%, #8b5cf6 100%);
30
- transition: width 0.4s ease;
31
  }
32
- .encrypted-badge {
33
- position: absolute;
34
- top: -10px;
35
- right: -10px;
36
- background-color: #10b981;
37
- color: white;
38
- border-radius: 50%;
39
- width: 24px;
40
- height: 24px;
41
- display: flex;
42
- align-items: center;
43
- justify-content: center;
44
- font-size: 12px;
45
  }
46
- .blur-effect {
47
- filter: blur(5px);
48
- transition: filter 0.3s ease;
49
  }
50
- .blur-effect:hover {
51
- filter: blur(0);
 
 
52
  }
53
- #downloadLink {
54
- transition: all 0.2s ease;
 
 
55
  }
56
- #downloadLink:hover {
57
- transform: translateY(-2px);
 
58
  }
59
  </style>
60
  </head>
61
- <body class="gradient-bg min-h-screen text-gray-100">
62
- <div class="container mx-auto px-4 py-8">
63
- <!-- Header -->
64
- <header class="mb-10 text-center">
65
- <h1 class="text-4xl font-bold mb-2 bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-purple-500">
66
- Secure Bitcoin Wallet Scanner
67
- </h1>
68
- <p class="text-gray-300 max-w-2xl mx-auto">
69
- Locally scan your directories for Bitcoin wallet files and check balances without exposing private keys
 
 
 
70
  </p>
71
  </header>
72
 
73
- <!-- Main Content -->
74
  <div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
75
- <!-- Scanner Panel -->
76
- <div class="lg:col-span-2 bg-gray-800 rounded-xl shadow-xl p-6">
77
- <div class="flex justify-between items-center mb-6">
78
- <h2 class="text-2xl font-semibold">Wallet Scanner</h2>
79
- <div class="flex space-x-2">
80
- <button id="scanBtn" class="bg-blue-600 hover:bg-blue-700 px-4 py-2 rounded-lg flex items-center">
 
 
 
81
  <i class="fas fa-search mr-2"></i> Scan Now
82
  </button>
83
- <button id="exportBtn" class="bg-purple-600 hover:bg-purple-700 px-4 py-2 rounded-lg flex items-center" disabled>
84
  <i class="fas fa-file-export mr-2"></i> Export
85
  </button>
86
  </div>
87
  </div>
88
 
89
- <!-- Directory Selection -->
90
- <div class="mb-6">
91
- <label class="block text-gray-300 mb-2">Scan Directory</label>
92
- <div class="flex">
93
- <input type="text" id="directoryPath" class="flex-grow bg-gray-700 border border-gray-600 rounded-l-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" placeholder="C:\Users\YourName\Documents" value="C:\Users\">
94
- <button class="bg-gray-600 hover:bg-gray-500 px-4 py-2 rounded-r-lg">
95
- <i class="fas fa-folder-open"></i>
96
  </button>
97
  </div>
98
  </div>
99
 
100
- <!-- Scan Options -->
101
- <div class="mb-6">
102
- <label class="block text-gray-300 mb-2">Scan Options</label>
103
- <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
104
- <label class="flex items-center space-x-2">
105
- <input type="checkbox" checked class="rounded text-blue-500">
 
 
 
106
  <span>.dat files</span>
107
  </label>
108
- <label class="flex items-center space-x-2">
109
- <input type="checkbox" checked class="rounded text-blue-500">
 
 
 
110
  <span>Seed Phrases</span>
111
  </label>
112
- <label class="flex items-center space-x-2">
113
- <input type="checkbox" checked class="rounded text-blue-500">
 
 
 
114
  <span>Private Keys</span>
115
  </label>
116
  </div>
117
  </div>
118
 
119
- <!-- Progress Bar -->
120
- <div class="mb-6">
121
- <div class="flex justify-between mb-2">
122
- <span>Scan Progress</span>
123
- <span id="progressText">0%</span>
124
- </div>
125
- <div class="progress-bar">
126
- <div id="progressFill" class="progress-fill" style="width: 0%"></div>
 
 
127
  </div>
 
128
  </div>
129
 
130
- <!-- Scan Results -->
131
  <div>
132
- <h3 class="text-xl font-medium mb-3">Scan Results</h3>
133
- <div id="resultsContainer" class="bg-gray-900 rounded-lg p-4 min-h-40 max-h-96 overflow-y-auto">
134
- <div class="text-center text-gray-500 py-8">
135
- <i class="fas fa-search fa-2x mb-2"></i>
136
- <p>No scan results yet. Click "Scan Now" to begin.</p>
 
 
 
 
 
 
137
  </div>
138
  </div>
139
  </div>
140
  </div>
141
 
142
- <!-- Wallet Info Panel -->
143
- <div class="bg-gray-800 rounded-xl shadow-xl p-6">
144
- <h2 class="text-2xl font-semibold mb-6">Detected Wallets</h2>
145
-
146
- <!-- Stats -->
147
- <div class="grid grid-cols-2 gap-4 mb-6">
148
- <div class="bg-gray-700 rounded-lg p-3 text-center">
149
- <div class="text-blue-400 text-sm">Wallets Found</div>
150
- <div id="walletsFound" class="text-2xl font-bold">0</div>
151
  </div>
152
- <div class="bg-gray-700 rounded-lg p-3 text-center">
153
- <div class="text-green-400 text-sm">With Balance</div>
154
- <div id="walletsWithBalance" class="text-2xl font-bold">0</div>
 
155
  </div>
156
  </div>
157
 
158
- <!-- Wallets List -->
159
- <div class="space-y-4" id="walletsList">
160
- <div class="text-center text-gray-500 py-8">
161
- <i class="fas fa-wallet fa-2x mb-2"></i>
162
- <p>No wallets detected yet</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  </div>
164
  </div>
165
 
166
- <!-- Security Info -->
167
- <div class="mt-8 p-4 bg-gray-900 rounded-lg">
 
 
 
 
 
 
 
 
 
 
 
168
  <div class="flex items-start">
169
- <div class="text-green-400 mr-3 mt-1">
170
- <i class="fas fa-lock"></i>
171
  </div>
172
  <div>
173
- <h4 class="font-medium mb-1">Security Information</h4>
174
  <p class="text-sm text-gray-400">
175
- All operations are performed locally. Private keys are never exposed or transmitted.
176
  </p>
177
  </div>
178
  </div>
@@ -180,36 +260,58 @@
180
  </div>
181
  </div>
182
 
183
- <!-- Encryption Modal -->
184
- <div id="encryptModal" class="fixed inset-0 bg-black bg-opacity-70 flex items-center justify-center z-50 hidden">
185
- <div class="bg-gray-800 rounded-xl p-6 max-w-md w-full mx-4">
186
- <div class="flex justify-between items-center mb-4">
187
- <h3 class="text-xl font-semibold">Secure Encryption</h3>
188
- <button id="closeModal" class="text-gray-400 hover:text-white">
189
  <i class="fas fa-times"></i>
190
  </button>
191
  </div>
192
- <p class="mb-4 text-gray-300">
193
- Enter your encryption passphrase to securely store the wallet information.
194
  </p>
195
- <div class="mb-4">
196
- <label class="block text-gray-300 mb-2">Passphrase</label>
197
- <input type="password" id="encryptionPass" class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500">
198
- </div>
199
- <div class="mb-4">
200
- <label class="block text-gray-300 mb-2">Confirm Passphrase</label>
201
- <input type="password" id="confirmPass" class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  </div>
203
- <div class="flex justify-end space-x-3">
204
- <button id="cancelEncrypt" class="px-4 py-2 rounded-lg border border-gray-600 hover:bg-gray-700">
205
  Cancel
206
  </button>
207
- <button id="confirmEncrypt" class="bg-blue-600 hover:bg-blue-700 px-4 py-2 rounded-lg">
208
- Encrypt & Save
209
  </button>
210
  </div>
211
  </div>
212
  </div>
 
 
 
 
 
 
213
  </div>
214
 
215
  <script>
@@ -218,15 +320,25 @@
218
  const scanBtn = document.getElementById('scanBtn');
219
  const exportBtn = document.getElementById('exportBtn');
220
  const progressText = document.getElementById('progressText');
221
- const progressFill = document.getElementById('progressFill');
 
222
  const resultsContainer = document.getElementById('resultsContainer');
223
  const walletsFound = document.getElementById('walletsFound');
224
  const walletsWithBalance = document.getElementById('walletsWithBalance');
 
 
225
  const walletsList = document.getElementById('walletsList');
 
226
  const encryptModal = document.getElementById('encryptModal');
 
227
  const closeModal = document.getElementById('closeModal');
228
  const cancelEncrypt = document.getElementById('cancelEncrypt');
229
  const confirmEncrypt = document.getElementById('confirmEncrypt');
 
 
 
 
 
230
 
231
  // Sample wallet data for demonstration
232
  const sampleWallets = [
@@ -235,78 +347,143 @@
235
  path: 'C:/Users/Documents/Bitcoin/wallet.dat',
236
  type: 'wallet.dat',
237
  balance: 0.42,
238
- encrypted: false
 
239
  },
240
  {
241
  name: 'My Backup Wallet',
242
  path: 'C:/Users/Desktop/backup_seed.txt',
243
  type: 'seed phrase',
244
  balance: 1.85,
245
- encrypted: true
 
246
  },
247
  {
248
  name: 'Old Wallet',
249
  path: 'C:/Users/Downloads/old_wallet.json',
250
  type: 'private key',
251
  balance: 0,
252
- encrypted: false
 
 
 
 
 
 
 
 
 
253
  }
254
  ];
255
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  // Scan button click handler
257
  scanBtn.addEventListener('click', function() {
258
  // Reset UI
259
- resultsContainer.innerHTML = '<div class="text-gray-500 py-4 text-center"><i class="fas fa-spinner fa-spin mr-2"></i>Scanning directories...</div>';
260
- walletsList.innerHTML = '<div class="text-center text-gray-500 py-8"><i class="fas fa-wallet fa-2x mb-2"></i><p>Scanning for wallets...</p></div>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  walletsFound.textContent = '0';
262
  walletsWithBalance.textContent = '0';
 
 
263
  scanBtn.disabled = true;
264
  scanBtn.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i> Scanning...';
265
 
266
  // Simulate scan progress
267
  let progress = 0;
 
268
  const progressInterval = setInterval(() => {
269
- progress += Math.random() * 10;
270
  if (progress > 100) progress = 100;
271
 
272
  progressText.textContent = Math.floor(progress) + '%';
273
- progressFill.style.width = progress + '%';
 
 
 
 
 
 
 
 
 
 
 
 
274
 
275
  if (progress === 100) {
276
  clearInterval(progressInterval);
277
- setTimeout(showScanResults, 500);
278
  }
279
  }, 300);
280
  });
281
 
282
- // Show scan results
283
  function showScanResults() {
284
  // Update results container
285
  let resultsHTML = `
286
- <div class="space-y-3">
287
- <div class="flex items-center justify-between p-3 bg-gray-700 rounded-lg">
288
- <div class="flex items-center">
289
- <i class="fas fa-check-circle text-green-400 mr-3"></i>
290
- <span>Scan completed successfully</span>
291
  </div>
292
- <span class="text-sm text-gray-400">${new Date().toLocaleTimeString()}</span>
293
- </div>
294
- <div class="flex items-center justify-between p-3 bg-gray-700 rounded-lg">
295
- <div class="flex items-center">
296
- <i class="fas fa-file-alt text-blue-400 mr-3"></i>
297
- <span>Scanned 3,452 files</span>
298
  </div>
299
  </div>
300
- <div class="flex items-center justify-between p-3 bg-gray-700 rounded-lg">
301
- <div class="flex items-center">
302
- <i class="fas fa-wallet text-purple-400 mr-3"></i>
303
- <span>Found ${sampleWallets.length} potential wallets</span>
 
 
 
 
 
 
 
 
 
 
 
304
  </div>
305
  </div>
 
306
  <div class="mt-4 text-center">
307
- <a id="downloadLink" href="#" class="inline-block bg-blue-600 hover:bg-blue-700 px-4 py-2 rounded-lg">
308
  <i class="fas fa-download mr-2"></i> Download Export File
309
- </a>
310
  </div>
311
  </div>
312
  `;
@@ -319,34 +496,52 @@
319
  scanBtn.disabled = false;
320
  scanBtn.innerHTML = '<i class="fas fa-search mr-2"></i> Scan Now';
321
  exportBtn.disabled = false;
 
 
 
 
322
  }
323
 
324
  // Update wallet list with sample data
325
  function updateWalletList() {
326
  let walletsHTML = '';
327
  let withBalance = 0;
 
 
328
 
329
- sampleWallets.forEach(wallet => {
330
  withBalance += wallet.balance > 0 ? 1 : 0;
 
 
 
 
 
 
 
331
 
332
  walletsHTML += `
333
- <div class="wallet-card relative bg-gray-700 rounded-lg p-4 ${wallet.encrypted ? 'border-l-4 border-green-500' : ''}">
334
- ${wallet.encrypted ? '<div class="encrypted-badge"><i class="fas fa-lock"></i></div>' : ''}
335
- <div class="flex justify-between items-start mb-2">
336
- <h4 class="font-medium truncate">${wallet.name}</h4>
337
- <span class="text-xs bg-gray-600 px-2 py-1 rounded">${wallet.type}</span>
 
 
338
  </div>
339
- <p class="text-xs text-gray-400 truncate mb-3">${wallet.path}</p>
340
  <div class="flex justify-between items-center">
341
  <div>
342
- <span class="text-sm text-gray-300">Balance:</span>
343
  <span class="font-bold ml-1 ${wallet.balance > 0 ? 'text-green-400' : 'text-gray-400'}">
344
- ${wallet.balance > 0 ? wallet.balance + ' BTC' : 'Empty'}
345
  </span>
346
  </div>
347
- <button class="text-blue-400 hover:text-blue-300 text-sm">
348
- <i class="fas fa-eye mr-1"></i> Details
349
- </button>
 
 
 
350
  </div>
351
  </div>
352
  `;
@@ -355,78 +550,172 @@
355
  walletsList.innerHTML = walletsHTML;
356
  walletsFound.textContent = sampleWallets.length;
357
  walletsWithBalance.textContent = withBalance;
 
 
358
  }
359
 
360
  // Export button click handler
361
  exportBtn.addEventListener('click', function() {
362
  encryptModal.classList.remove('hidden');
 
 
 
 
363
  });
364
 
365
  // Modal close handlers
366
- closeModal.addEventListener('click', function() {
367
- encryptModal.classList.add('hidden');
368
- });
 
 
 
 
369
 
370
- cancelEncrypt.addEventListener('click', function() {
371
- encryptModal.classList.add('hidden');
372
- });
373
 
374
  // Confirm encryption
375
  confirmEncrypt.addEventListener('click', function() {
376
- const pass = document.getElementById('encryptionPass').value;
377
- const confirmPass = document.getElementById('confirmPass').value;
378
 
379
- if (!pass || !confirmPass) {
380
  alert('Please enter and confirm your passphrase');
381
  return;
382
  }
383
 
384
- if (pass !== confirmPass) {
385
  alert('Passphrases do not match');
386
  return;
387
  }
388
 
389
- // Simulate encryption process
390
- encryptModal.classList.add('hidden');
391
-
392
- // Create export data
393
- const exportData = {
394
- wallets: sampleWallets.filter(w => w.balance > 0),
395
- timestamp: new Date().toISOString(),
396
- version: "1.0"
397
- };
398
 
399
- // Create download link
400
- const dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(exportData, null, 2));
401
- const downloadLink = document.getElementById('downloadLink');
402
- downloadLink.setAttribute("href", dataStr);
403
- downloadLink.setAttribute("download", `electrum_wallets_${new Date().getTime()}.json`);
 
 
 
 
 
404
 
405
- // Show success message
406
- resultsContainer.innerHTML = `
407
- <div class="space-y-3">
408
- <div class="flex items-center justify-between p-3 bg-gray-700 rounded-lg">
409
- <div class="flex items-center">
410
- <i class="fas fa-lock text-green-400 mr-3"></i>
411
- <span>Wallet data encrypted and saved securely</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
412
  </div>
413
- <span class="text-sm text-gray-400">${new Date().toLocaleTimeString()}</span>
414
- </div>
415
- <div class="p-4 bg-gray-900 rounded-lg">
416
- <div class="flex items-center">
417
- <i class="fas fa-file-download text-blue-400 mr-3"></i>
418
  <div>
419
- <p class="font-medium">electrum_export.json</p>
420
- <p class="text-sm text-gray-400">Electrum-compatible wallet export</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
421
  </div>
422
  </div>
423
- </div>
424
- </div>
425
- `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
426
 
427
- // Reset passphrase fields
428
- document.getElementById('encryptionPass').value = '';
429
- document.getElementById('confirmPass').value = '';
 
 
 
430
  });
431
  });
432
  </script>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>BitVault | Secure Bitcoin Wallet Scanner</title>
7
  <script src="https://cdn.tailwindcss.com"></script>
8
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
  <style>
10
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
11
+
12
+ body {
13
+ font-family: 'Inter', sans-serif;
14
+ background-color: #0f172a;
15
  }
16
+
17
+ .glass-card {
18
+ background: rgba(15, 23, 42, 0.7);
19
+ backdrop-filter: blur(10px);
20
+ -webkit-backdrop-filter: blur(10px);
21
+ border: 1px solid rgba(255, 255, 255, 0.08);
22
+ }
23
+
24
+ .gradient-text {
25
+ background: linear-gradient(90deg, #38bdf8 0%, #818cf8 50%, #c084fc 100%);
26
+ -webkit-background-clip: text;
27
+ -webkit-text-fill-color: transparent;
28
+ }
29
+
30
+ .progress-ring {
31
+ transition: stroke-dashoffset 0.5s;
32
+ transform: rotate(-90deg);
33
+ transform-origin: 50% 50%;
34
+ }
35
+
36
  .wallet-card {
37
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
38
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
39
  }
40
+
41
  .wallet-card:hover {
42
+ transform: translateY(-3px);
43
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
44
+ }
45
+
46
+ .scan-pulse {
47
+ animation: pulse 2s infinite;
48
  }
49
+
50
+ @keyframes pulse {
51
+ 0% {
52
+ box-shadow: 0 0 0 0 rgba(56, 189, 248, 0.7);
53
+ }
54
+ 70% {
55
+ box-shadow: 0 0 0 10px rgba(56, 189, 248, 0);
56
+ }
57
+ 100% {
58
+ box-shadow: 0 0 0 0 rgba(56, 189, 248, 0);
59
+ }
60
  }
61
+
62
+ .fade-in {
63
+ animation: fadeIn 0.5s ease-in;
 
 
64
  }
65
+
66
+ @keyframes fadeIn {
67
+ from { opacity: 0; transform: translateY(10px); }
68
+ to { opacity: 1; transform: translateY(0); }
 
 
 
 
 
 
 
 
 
69
  }
70
+
71
+ .custom-scrollbar::-webkit-scrollbar {
72
+ width: 6px;
73
  }
74
+
75
+ .custom-scrollbar::-webkit-scrollbar-track {
76
+ background: rgba(255, 255, 255, 0.05);
77
+ border-radius: 10px;
78
  }
79
+
80
+ .custom-scrollbar::-webkit-scrollbar-thumb {
81
+ background: rgba(255, 255, 255, 0.2);
82
+ border-radius: 10px;
83
  }
84
+
85
+ .custom-scrollbar::-webkit-scrollbar-thumb:hover {
86
+ background: rgba(255, 255, 255, 0.3);
87
  }
88
  </style>
89
  </head>
90
+ <body class="min-h-screen text-gray-100">
91
+ <div class="container mx-auto px-4 py-8 max-w-7xl">
92
+ <!-- Header with logo and tagline -->
93
+ <header class="mb-12 text-center">
94
+ <div class="flex items-center justify-center mb-4">
95
+ <div class="w-12 h-12 rounded-full bg-gradient-to-br from-blue-400 to-purple-500 flex items-center justify-center mr-3">
96
+ <i class="fas fa-bitcoin text-xl"></i>
97
+ </div>
98
+ <h1 class="text-4xl font-bold gradient-text">BitVault</h1>
99
+ </div>
100
+ <p class="text-gray-400 max-w-2xl mx-auto text-lg">
101
+ Locally scan for Bitcoin wallets with military-grade security and privacy
102
  </p>
103
  </header>
104
 
105
+ <!-- Main content grid -->
106
  <div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
107
+ <!-- Scanner panel -->
108
+ <div class="lg:col-span-2 glass-card rounded-2xl p-8">
109
+ <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center mb-8">
110
+ <div>
111
+ <h2 class="text-2xl font-semibold mb-1">Wallet Scanner</h2>
112
+ <p class="text-gray-400 text-sm">Find and analyze Bitcoin wallets on your device</p>
113
+ </div>
114
+ <div class="flex space-x-3 mt-4 sm:mt-0">
115
+ <button id="scanBtn" class="bg-gradient-to-r from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700 px-5 py-2.5 rounded-xl flex items-center font-medium shadow-lg">
116
  <i class="fas fa-search mr-2"></i> Scan Now
117
  </button>
118
+ <button id="exportBtn" class="bg-gray-700 hover:bg-gray-600 px-5 py-2.5 rounded-xl flex items-center font-medium" disabled>
119
  <i class="fas fa-file-export mr-2"></i> Export
120
  </button>
121
  </div>
122
  </div>
123
 
124
+ <!-- Directory selection with modern design -->
125
+ <div class="mb-8">
126
+ <label class="block text-gray-300 mb-3 font-medium">Scan Directory</label>
127
+ <div class="relative">
128
+ <input type="text" id="directoryPath" class="w-full bg-gray-800 border border-gray-700 rounded-xl px-5 py-3 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="Select a directory to scan..." value="C:\Users\">
129
+ <button class="absolute right-3 top-3 bg-gray-700 hover:bg-gray-600 p-2 rounded-lg">
130
+ <i class="fas fa-folder-open text-blue-400"></i>
131
  </button>
132
  </div>
133
  </div>
134
 
135
+ <!-- Scan options with toggle switches -->
136
+ <div class="mb-8">
137
+ <label class="block text-gray-300 mb-3 font-medium">Scan Options</label>
138
+ <div class="grid grid-cols-1 sm:grid-cols-3 gap-4">
139
+ <label class="flex items-center space-x-3 bg-gray-800 hover:bg-gray-750 rounded-xl p-3 cursor-pointer transition-colors">
140
+ <div class="relative inline-block w-10 mr-2 align-middle select-none">
141
+ <input type="checkbox" checked class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer transition-all duration-200 ease-in-out" />
142
+ <label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-600 cursor-pointer transition-colors duration-200 ease-in-out"></label>
143
+ </div>
144
  <span>.dat files</span>
145
  </label>
146
+ <label class="flex items-center space-x-3 bg-gray-800 hover:bg-gray-750 rounded-xl p-3 cursor-pointer transition-colors">
147
+ <div class="relative inline-block w-10 mr-2 align-middle select-none">
148
+ <input type="checkbox" checked class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer transition-all duration-200 ease-in-out" />
149
+ <label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-600 cursor-pointer transition-colors duration-200 ease-in-out"></label>
150
+ </div>
151
  <span>Seed Phrases</span>
152
  </label>
153
+ <label class="flex items-center space-x-3 bg-gray-800 hover:bg-gray-750 rounded-xl p-3 cursor-pointer transition-colors">
154
+ <div class="relative inline-block w-10 mr-2 align-middle select-none">
155
+ <input type="checkbox" checked class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer transition-all duration-200 ease-in-out" />
156
+ <label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-600 cursor-pointer transition-colors duration-200 ease-in-out"></label>
157
+ </div>
158
  <span>Private Keys</span>
159
  </label>
160
  </div>
161
  </div>
162
 
163
+ <!-- Circular progress indicator -->
164
+ <div class="mb-8 flex flex-col items-center">
165
+ <div class="relative w-32 h-32 mb-4">
166
+ <svg class="w-full h-full" viewBox="0 0 100 100">
167
+ <circle class="text-gray-800" stroke-width="8" stroke="currentColor" fill="transparent" r="40" cx="50" cy="50" />
168
+ <circle id="progressCircle" class="progress-ring text-blue-500" stroke-width="8" stroke-linecap="round" stroke="currentColor" fill="transparent" r="40" cx="50" cy="50" stroke-dasharray="251.2" stroke-dashoffset="251.2" />
169
+ </svg>
170
+ <div class="absolute inset-0 flex items-center justify-center">
171
+ <span id="progressText" class="text-2xl font-bold">0%</span>
172
+ </div>
173
  </div>
174
+ <p id="progressStatus" class="text-gray-400">Ready to scan</p>
175
  </div>
176
 
177
+ <!-- Scan results with animated cards -->
178
  <div>
179
+ <div class="flex justify-between items-center mb-4">
180
+ <h3 class="text-xl font-semibold">Scan Results</h3>
181
+ <span class="text-sm text-gray-400" id="fileCount">0 files scanned</span>
182
+ </div>
183
+ <div id="resultsContainer" class="glass-card rounded-2xl p-6 min-h-48 max-h-96 overflow-y-auto custom-scrollbar">
184
+ <div class="text-center py-10">
185
+ <div class="w-16 h-16 mx-auto mb-4 rounded-full bg-gray-800 flex items-center justify-center">
186
+ <i class="fas fa-search text-2xl text-blue-400"></i>
187
+ </div>
188
+ <h4 class="text-lg font-medium mb-1">No scan results yet</h4>
189
+ <p class="text-gray-400">Click "Scan Now" to begin searching for wallets</p>
190
  </div>
191
  </div>
192
  </div>
193
  </div>
194
 
195
+ <!-- Wallet info panel -->
196
+ <div class="glass-card rounded-2xl p-8">
197
+ <div class="flex items-center justify-between mb-8">
198
+ <div>
199
+ <h2 class="text-2xl font-semibold mb-1">Detected Wallets</h2>
200
+ <p class="text-gray-400 text-sm">Found <span id="walletsFound" class="font-medium">0</span> wallets</p>
 
 
 
201
  </div>
202
+ <div class="relative">
203
+ <div id="totalBalance" class="text-2xl font-bold bg-gradient-to-r from-blue-400 to-purple-500 bg-clip-text text-transparent">
204
+ 0.00 BTC
205
+ </div>
206
  </div>
207
  </div>
208
 
209
+ <!-- Stats cards -->
210
+ <div class="grid grid-cols-2 gap-4 mb-8">
211
+ <div class="bg-gray-800 rounded-xl p-4">
212
+ <div class="flex items-center">
213
+ <div class="w-10 h-10 rounded-full bg-blue-900/30 text-blue-400 flex items-center justify-center mr-3">
214
+ <i class="fas fa-wallet"></i>
215
+ </div>
216
+ <div>
217
+ <p class="text-xs text-gray-400">With Balance</p>
218
+ <p id="walletsWithBalance" class="font-bold text-lg">0</p>
219
+ </div>
220
+ </div>
221
+ </div>
222
+ <div class="bg-gray-800 rounded-xl p-4">
223
+ <div class="flex items-center">
224
+ <div class="w-10 h-10 rounded-full bg-purple-900/30 text-purple-400 flex items-center justify-center mr-3">
225
+ <i class="fas fa-lock"></i>
226
+ </div>
227
+ <div>
228
+ <p class="text-xs text-gray-400">Encrypted</p>
229
+ <p id="encryptedWallets" class="font-bold text-lg">0</p>
230
+ </div>
231
+ </div>
232
  </div>
233
  </div>
234
 
235
+ <!-- Wallets list -->
236
+ <div class="space-y-4 mb-8 max-h-96 overflow-y-auto custom-scrollbar" id="walletsList">
237
+ <div class="text-center py-10">
238
+ <div class="w-16 h-16 mx-auto mb-4 rounded-full bg-gray-800 flex items-center justify-center">
239
+ <i class="fas fa-wallet text-2xl text-purple-400"></i>
240
+ </div>
241
+ <h4 class="text-lg font-medium mb-1">No wallets detected</h4>
242
+ <p class="text-gray-400">Scan your device to find Bitcoin wallets</p>
243
+ </div>
244
+ </div>
245
+
246
+ <!-- Security assurance -->
247
+ <div class="bg-gradient-to-br from-blue-900/30 to-purple-900/30 rounded-xl p-5 border border-blue-800/30">
248
  <div class="flex items-start">
249
+ <div class="w-10 h-10 rounded-full bg-blue-900/30 text-blue-400 flex items-center justify-center mr-3 mt-1">
250
+ <i class="fas fa-shield-alt"></i>
251
  </div>
252
  <div>
253
+ <h4 class="font-semibold mb-2">100% Local Processing</h4>
254
  <p class="text-sm text-gray-400">
255
+ All operations run on your device. No data is sent to external servers. Your private keys never leave your computer.
256
  </p>
257
  </div>
258
  </div>
 
260
  </div>
261
  </div>
262
 
263
+ <!-- Encryption modal -->
264
+ <div id="encryptModal" class="fixed inset-0 bg-black bg-opacity-80 flex items-center justify-center z-50 hidden px-4">
265
+ <div class="glass-card rounded-2xl p-8 max-w-md w-full border border-gray-700 transform transition-all duration-300 scale-95 opacity-0" id="modalContent">
266
+ <div class="flex justify-between items-center mb-6">
267
+ <h3 class="text-xl font-semibold">Secure Export</h3>
268
+ <button id="closeModal" class="text-gray-400 hover:text-white p-1 rounded-full hover:bg-gray-700">
269
  <i class="fas fa-times"></i>
270
  </button>
271
  </div>
272
+ <p class="mb-6 text-gray-400">
273
+ Protect your wallet data with AES-256 encryption before exporting. Choose a strong passphrase.
274
  </p>
275
+ <div class="space-y-5">
276
+ <div>
277
+ <label class="block text-gray-300 mb-2 text-sm font-medium">Passphrase</label>
278
+ <div class="relative">
279
+ <input type="password" id="encryptionPass" class="w-full bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="Enter passphrase">
280
+ <button class="absolute right-3 top-3 text-gray-400 hover:text-gray-300" id="togglePass1">
281
+ <i class="fas fa-eye"></i>
282
+ </button>
283
+ </div>
284
+ </div>
285
+ <div>
286
+ <label class="block text-gray-300 mb-2 text-sm font-medium">Confirm Passphrase</label>
287
+ <div class="relative">
288
+ <input type="password" id="confirmPass" class="w-full bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="Confirm passphrase">
289
+ <button class="absolute right-3 top-3 text-gray-400 hover:text-gray-300" id="togglePass2">
290
+ <i class="fas fa-eye"></i>
291
+ </button>
292
+ </div>
293
+ </div>
294
+ <div class="flex items-center text-sm text-gray-400">
295
+ <i class="fas fa-info-circle mr-2 text-blue-400"></i>
296
+ <span>Remember this passphrase - it cannot be recovered</span>
297
+ </div>
298
  </div>
299
+ <div class="flex justify-end space-x-3 mt-8">
300
+ <button id="cancelEncrypt" class="px-5 py-2.5 rounded-xl border border-gray-600 hover:bg-gray-700 font-medium">
301
  Cancel
302
  </button>
303
+ <button id="confirmEncrypt" class="bg-gradient-to-r from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700 px-5 py-2.5 rounded-xl font-medium shadow-lg">
304
+ Encrypt & Export
305
  </button>
306
  </div>
307
  </div>
308
  </div>
309
+
310
+ <!-- Success toast notification -->
311
+ <div id="successToast" class="fixed bottom-6 right-6 bg-green-600 text-white px-6 py-3 rounded-xl shadow-lg flex items-center transform translate-y-10 opacity-0 transition-all duration-300 z-50">
312
+ <i class="fas fa-check-circle mr-3"></i>
313
+ <span>Export file saved successfully!</span>
314
+ </div>
315
  </div>
316
 
317
  <script>
 
320
  const scanBtn = document.getElementById('scanBtn');
321
  const exportBtn = document.getElementById('exportBtn');
322
  const progressText = document.getElementById('progressText');
323
+ const progressCircle = document.getElementById('progressCircle');
324
+ const progressStatus = document.getElementById('progressStatus');
325
  const resultsContainer = document.getElementById('resultsContainer');
326
  const walletsFound = document.getElementById('walletsFound');
327
  const walletsWithBalance = document.getElementById('walletsWithBalance');
328
+ const encryptedWallets = document.getElementById('encryptedWallets');
329
+ const totalBalance = document.getElementById('totalBalance');
330
  const walletsList = document.getElementById('walletsList');
331
+ const fileCount = document.getElementById('fileCount');
332
  const encryptModal = document.getElementById('encryptModal');
333
+ const modalContent = document.getElementById('modalContent');
334
  const closeModal = document.getElementById('closeModal');
335
  const cancelEncrypt = document.getElementById('cancelEncrypt');
336
  const confirmEncrypt = document.getElementById('confirmEncrypt');
337
+ const togglePass1 = document.getElementById('togglePass1');
338
+ const togglePass2 = document.getElementById('togglePass2');
339
+ const encryptionPass = document.getElementById('encryptionPass');
340
+ const confirmPass = document.getElementById('confirmPass');
341
+ const successToast = document.getElementById('successToast');
342
 
343
  // Sample wallet data for demonstration
344
  const sampleWallets = [
 
347
  path: 'C:/Users/Documents/Bitcoin/wallet.dat',
348
  type: 'wallet.dat',
349
  balance: 0.42,
350
+ encrypted: false,
351
+ date: '2023-05-15'
352
  },
353
  {
354
  name: 'My Backup Wallet',
355
  path: 'C:/Users/Desktop/backup_seed.txt',
356
  type: 'seed phrase',
357
  balance: 1.85,
358
+ encrypted: true,
359
+ date: '2023-06-22'
360
  },
361
  {
362
  name: 'Old Wallet',
363
  path: 'C:/Users/Downloads/old_wallet.json',
364
  type: 'private key',
365
  balance: 0,
366
+ encrypted: false,
367
+ date: '2022-11-05'
368
+ },
369
+ {
370
+ name: 'Trading Wallet',
371
+ path: 'C:/Users/AppData/Roaming/Bitcoin/wallet.dat',
372
+ type: 'wallet.dat',
373
+ balance: 3.21,
374
+ encrypted: true,
375
+ date: '2023-07-10'
376
  }
377
  ];
378
 
379
+ // Toggle password visibility
380
+ togglePass1.addEventListener('click', function() {
381
+ const type = encryptionPass.getAttribute('type') === 'password' ? 'text' : 'password';
382
+ encryptionPass.setAttribute('type', type);
383
+ togglePass1.innerHTML = type === 'password' ? '<i class="fas fa-eye"></i>' : '<i class="fas fa-eye-slash"></i>';
384
+ });
385
+
386
+ togglePass2.addEventListener('click', function() {
387
+ const type = confirmPass.getAttribute('type') === 'password' ? 'text' : 'password';
388
+ confirmPass.setAttribute('type', type);
389
+ togglePass2.innerHTML = type === 'password' ? '<i class="fas fa-eye"></i>' : '<i class="fas fa-eye-slash"></i>';
390
+ });
391
+
392
  // Scan button click handler
393
  scanBtn.addEventListener('click', function() {
394
  // Reset UI
395
+ resultsContainer.innerHTML = `
396
+ <div class="flex flex-col items-center justify-center py-10">
397
+ <div class="w-20 h-20 mb-4 rounded-full bg-blue-900/20 flex items-center justify-center scan-pulse">
398
+ <i class="fas fa-search text-3xl text-blue-400"></i>
399
+ </div>
400
+ <h4 class="text-lg font-medium mb-1">Scanning directories</h4>
401
+ <p class="text-gray-400">Please wait while we search for wallet files</p>
402
+ </div>
403
+ `;
404
+
405
+ walletsList.innerHTML = `
406
+ <div class="flex flex-col items-center justify-center py-10">
407
+ <div class="w-16 h-16 mb-4 rounded-full bg-gray-800 flex items-center justify-center">
408
+ <i class="fas fa-spinner fa-spin text-2xl text-purple-400"></i>
409
+ </div>
410
+ <h4 class="text-lg font-medium mb-1">Scanning for wallets</h4>
411
+ <p class="text-gray-400">This may take a few moments</p>
412
+ </div>
413
+ `;
414
+
415
  walletsFound.textContent = '0';
416
  walletsWithBalance.textContent = '0';
417
+ encryptedWallets.textContent = '0';
418
+ totalBalance.textContent = '0.00 BTC';
419
  scanBtn.disabled = true;
420
  scanBtn.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i> Scanning...';
421
 
422
  // Simulate scan progress
423
  let progress = 0;
424
+ const circumference = 2 * Math.PI * 40;
425
  const progressInterval = setInterval(() => {
426
+ progress += Math.random() * 8;
427
  if (progress > 100) progress = 100;
428
 
429
  progressText.textContent = Math.floor(progress) + '%';
430
+ const offset = circumference - (progress / 100) * circumference;
431
+ progressCircle.style.strokeDashoffset = offset;
432
+
433
+ // Update status text
434
+ if (progress < 30) {
435
+ progressStatus.textContent = 'Indexing files...';
436
+ } else if (progress < 70) {
437
+ progressStatus.textContent = 'Analyzing potential wallets...';
438
+ fileCount.textContent = `${Math.floor(progress * 35)} files scanned`;
439
+ } else {
440
+ progressStatus.textContent = 'Finalizing scan...';
441
+ fileCount.textContent = `${Math.floor(progress * 35)} files scanned`;
442
+ }
443
 
444
  if (progress === 100) {
445
  clearInterval(progressInterval);
446
+ setTimeout(showScanResults, 800);
447
  }
448
  }, 300);
449
  });
450
 
451
+ // Show scan results with animation
452
  function showScanResults() {
453
  // Update results container
454
  let resultsHTML = `
455
+ <div class="space-y-4 fade-in">
456
+ <div class="flex items-center p-4 bg-gray-800 rounded-xl">
457
+ <div class="w-12 h-12 rounded-full bg-green-900/20 flex items-center justify-center mr-4">
458
+ <i class="fas fa-check-circle text-green-400"></i>
 
459
  </div>
460
+ <div>
461
+ <h4 class="font-medium mb-1">Scan completed successfully</h4>
462
+ <p class="text-sm text-gray-400">${new Date().toLocaleString()}</p>
 
 
 
463
  </div>
464
  </div>
465
+
466
+ <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
467
+ <div class="p-4 bg-gray-800 rounded-xl">
468
+ <div class="flex items-center mb-2">
469
+ <i class="fas fa-file-alt text-blue-400 mr-3"></i>
470
+ <span class="font-medium">Files Scanned</span>
471
+ </div>
472
+ <p class="text-2xl font-bold">3,452</p>
473
+ </div>
474
+ <div class="p-4 bg-gray-800 rounded-xl">
475
+ <div class="flex items-center mb-2">
476
+ <i class="fas fa-wallet text-purple-400 mr-3"></i>
477
+ <span class="font-medium">Wallets Found</span>
478
+ </div>
479
+ <p class="text-2xl font-bold">${sampleWallets.length}</p>
480
  </div>
481
  </div>
482
+
483
  <div class="mt-4 text-center">
484
+ <button id="downloadLink" class="inline-flex items-center bg-gradient-to-r from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700 px-5 py-2.5 rounded-xl font-medium shadow-lg">
485
  <i class="fas fa-download mr-2"></i> Download Export File
486
+ </button>
487
  </div>
488
  </div>
489
  `;
 
496
  scanBtn.disabled = false;
497
  scanBtn.innerHTML = '<i class="fas fa-search mr-2"></i> Scan Now';
498
  exportBtn.disabled = false;
499
+
500
+ // Update progress status
501
+ progressStatus.textContent = 'Scan completed';
502
+ fileCount.textContent = '3,452 files scanned';
503
  }
504
 
505
  // Update wallet list with sample data
506
  function updateWalletList() {
507
  let walletsHTML = '';
508
  let withBalance = 0;
509
+ let encryptedCount = 0;
510
+ let balanceTotal = 0;
511
 
512
+ sampleWallets.forEach((wallet, index) => {
513
  withBalance += wallet.balance > 0 ? 1 : 0;
514
+ encryptedCount += wallet.encrypted ? 1 : 0;
515
+ balanceTotal += wallet.balance;
516
+
517
+ // Format balance with commas
518
+ const formattedBalance = wallet.balance > 0 ?
519
+ wallet.balance.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 8 }) :
520
+ '0.00';
521
 
522
  walletsHTML += `
523
+ <div class="wallet-card bg-gray-800 rounded-xl p-5 fade-in" style="animation-delay: ${index * 0.1}s">
524
+ <div class="flex justify-between items-start mb-3">
525
+ <div>
526
+ <h4 class="font-semibold truncate">${wallet.name}</h4>
527
+ <p class="text-xs text-gray-400">${wallet.date}</p>
528
+ </div>
529
+ <span class="text-xs bg-gray-700 px-2 py-1 rounded-full">${wallet.type}</span>
530
  </div>
531
+ <p class="text-xs text-gray-400 truncate mb-4">${wallet.path}</p>
532
  <div class="flex justify-between items-center">
533
  <div>
534
+ <span class="text-sm text-gray-400">Balance:</span>
535
  <span class="font-bold ml-1 ${wallet.balance > 0 ? 'text-green-400' : 'text-gray-400'}">
536
+ ${wallet.balance > 0 ? formattedBalance + ' BTC' : 'Empty'}
537
  </span>
538
  </div>
539
+ <div class="flex items-center space-x-2">
540
+ ${wallet.encrypted ? '<span class="text-xs bg-green-900/30 text-green-400 px-2 py-1 rounded-full"><i class="fas fa-lock mr-1"></i> Encrypted</span>' : ''}
541
+ <button class="text-blue-400 hover:text-blue-300 text-sm">
542
+ <i class="fas fa-ellipsis-h"></i>
543
+ </button>
544
+ </div>
545
  </div>
546
  </div>
547
  `;
 
550
  walletsList.innerHTML = walletsHTML;
551
  walletsFound.textContent = sampleWallets.length;
552
  walletsWithBalance.textContent = withBalance;
553
+ encryptedWallets.textContent = encryptedCount;
554
+ totalBalance.textContent = balanceTotal.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 8 }) + ' BTC';
555
  }
556
 
557
  // Export button click handler
558
  exportBtn.addEventListener('click', function() {
559
  encryptModal.classList.remove('hidden');
560
+ setTimeout(() => {
561
+ modalContent.classList.remove('scale-95');
562
+ modalContent.classList.remove('opacity-0');
563
+ }, 10);
564
  });
565
 
566
  // Modal close handlers
567
+ function closeModalHandler() {
568
+ modalContent.classList.add('scale-95');
569
+ modalContent.classList.add('opacity-0');
570
+ setTimeout(() => {
571
+ encryptModal.classList.add('hidden');
572
+ }, 300);
573
+ }
574
 
575
+ closeModal.addEventListener('click', closeModalHandler);
576
+ cancelEncrypt.addEventListener('click', closeModalHandler);
 
577
 
578
  // Confirm encryption
579
  confirmEncrypt.addEventListener('click', function() {
580
+ const pass = encryptionPass.value;
581
+ const confirm = confirmPass.value;
582
 
583
+ if (!pass || !confirm) {
584
  alert('Please enter and confirm your passphrase');
585
  return;
586
  }
587
 
588
+ if (pass !== confirm) {
589
  alert('Passphrases do not match');
590
  return;
591
  }
592
 
593
+ if (pass.length < 8) {
594
+ alert('Passphrase must be at least 8 characters');
595
+ return;
596
+ }
 
 
 
 
 
597
 
598
+ // Simulate encryption process
599
+ modalContent.innerHTML = `
600
+ <div class="flex flex-col items-center justify-center py-10">
601
+ <div class="w-20 h-20 mb-6 rounded-full bg-purple-900/20 flex items-center justify-center">
602
+ <i class="fas fa-spinner fa-spin text-3xl text-purple-400"></i>
603
+ </div>
604
+ <h4 class="text-lg font-medium mb-2">Encrypting wallet data</h4>
605
+ <p class="text-gray-400 text-center">Securing your wallets with AES-256 encryption</p>
606
+ </div>
607
+ `;
608
 
609
+ setTimeout(() => {
610
+ // Create export data
611
+ const exportData = {
612
+ wallets: sampleWallets.filter(w => w.balance > 0),
613
+ timestamp: new Date().toISOString(),
614
+ version: "1.0"
615
+ };
616
+
617
+ // Create download link
618
+ const dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(exportData, null, 2));
619
+ const downloadLink = document.getElementById('downloadLink');
620
+ if (downloadLink) {
621
+ downloadLink.setAttribute("href", dataStr);
622
+ downloadLink.setAttribute("download", `bitvault_export_${new Date().getTime()}.json`);
623
+ }
624
+
625
+ // Close modal
626
+ closeModalHandler();
627
+
628
+ // Show success toast
629
+ successToast.classList.remove('translate-y-10');
630
+ successToast.classList.remove('opacity-0');
631
+ setTimeout(() => {
632
+ successToast.classList.add('translate-y-10');
633
+ successToast.classList.add('opacity-0');
634
+ }, 3000);
635
+
636
+ // Reset modal for next use
637
+ setTimeout(() => {
638
+ modalContent.innerHTML = `
639
+ <div class="flex justify-between items-center mb-6">
640
+ <h3 class="text-xl font-semibold">Secure Export</h3>
641
+ <button id="closeModal" class="text-gray-400 hover:text-white p-1 rounded-full hover:bg-gray-700">
642
+ <i class="fas fa-times"></i>
643
+ </button>
644
  </div>
645
+ <p class="mb-6 text-gray-400">
646
+ Protect your wallet data with AES-256 encryption before exporting. Choose a strong passphrase.
647
+ </p>
648
+ <div class="space-y-5">
 
649
  <div>
650
+ <label class="block text-gray-300 mb-2 text-sm font-medium">Passphrase</label>
651
+ <div class="relative">
652
+ <input type="password" id="encryptionPass" class="w-full bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="Enter passphrase">
653
+ <button class="absolute right-3 top-3 text-gray-400 hover:text-gray-300" id="togglePass1">
654
+ <i class="fas fa-eye"></i>
655
+ </button>
656
+ </div>
657
+ </div>
658
+ <div>
659
+ <label class="block text-gray-300 mb-2 text-sm font-medium">Confirm Passphrase</label>
660
+ <div class="relative">
661
+ <input type="password" id="confirmPass" class="w-full bg-gray-800 border border-gray-700 rounded-xl px-4 py-3 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="Confirm passphrase">
662
+ <button class="absolute right-3 top-3 text-gray-400 hover:text-gray-300" id="togglePass2">
663
+ <i class="fas fa-eye"></i>
664
+ </button>
665
+ </div>
666
+ </div>
667
+ <div class="flex items-center text-sm text-gray-400">
668
+ <i class="fas fa-info-circle mr-2 text-blue-400"></i>
669
+ <span>Remember this passphrase - it cannot be recovered</span>
670
  </div>
671
  </div>
672
+ <div class="flex justify-end space-x-3 mt-8">
673
+ <button id="cancelEncrypt" class="px-5 py-2.5 rounded-xl border border-gray-600 hover:bg-gray-700 font-medium">
674
+ Cancel
675
+ </button>
676
+ <button id="confirmEncrypt" class="bg-gradient-to-r from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700 px-5 py-2.5 rounded-xl font-medium shadow-lg">
677
+ Encrypt & Export
678
+ </button>
679
+ </div>
680
+ `;
681
+
682
+ // Re-attach event listeners
683
+ document.getElementById('closeModal').addEventListener('click', closeModalHandler);
684
+ document.getElementById('cancelEncrypt').addEventListener('click', closeModalHandler);
685
+ document.getElementById('confirmEncrypt').addEventListener('click', confirmEncrypt);
686
+ document.getElementById('togglePass1').addEventListener('click', function() {
687
+ const type = document.getElementById('encryptionPass').getAttribute('type') === 'password' ? 'text' : 'password';
688
+ document.getElementById('encryptionPass').setAttribute('type', type);
689
+ this.innerHTML = type === 'password' ? '<i class="fas fa-eye"></i>' : '<i class="fas fa-eye-slash"></i>';
690
+ });
691
+ document.getElementById('togglePass2').addEventListener('click', function() {
692
+ const type = document.getElementById('confirmPass').getAttribute('type') === 'password' ? 'text' : 'password';
693
+ document.getElementById('confirmPass').setAttribute('type', type);
694
+ this.innerHTML = type === 'password' ? '<i class="fas fa-eye"></i>' : '<i class="fas fa-eye-slash"></i>';
695
+ });
696
+ }, 500);
697
+ }, 1500);
698
+ });
699
+
700
+ // Initialize toggle switches
701
+ document.querySelectorAll('.toggle-checkbox').forEach(checkbox => {
702
+ checkbox.addEventListener('change', function() {
703
+ const label = this.nextElementSibling;
704
+ if (this.checked) {
705
+ label.classList.remove('bg-gray-600');
706
+ label.classList.add('bg-blue-500');
707
+ } else {
708
+ label.classList.remove('bg-blue-500');
709
+ label.classList.add('bg-gray-600');
710
+ }
711
+ });
712
 
713
+ // Initialize state
714
+ if (checkbox.checked) {
715
+ const label = checkbox.nextElementSibling;
716
+ label.classList.remove('bg-gray-600');
717
+ label.classList.add('bg-blue-500');
718
+ }
719
  });
720
  });
721
  </script>