eisssa107 commited on
Commit
c9d9cdc
·
verified ·
1 Parent(s): b5ac053

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +568 -19
index.html CHANGED
@@ -1,19 +1,568 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="ar" dir="rtl">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>نظام إدارة الحسابات - Vault System</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;600;700;800&display=swap" rel="stylesheet" />
9
+ <style>
10
+ * {
11
+ font-family: 'Cairo', sans-serif;
12
+ }
13
+ body {
14
+ background: #0A0A0F;
15
+ min-height: 100vh;
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ }
20
+ .neon-glow {
21
+ box-shadow: 0 0 40px rgba(0, 240, 255, 0.3), 0 0 80px rgba(176, 38, 255, 0.15);
22
+ }
23
+ .neon-border {
24
+ border: 1px solid rgba(0, 240, 255, 0.3);
25
+ }
26
+ .glass {
27
+ background: rgba(20, 20, 30, 0.8);
28
+ backdrop-filter: blur(20px);
29
+ }
30
+ .btn-neon {
31
+ background: linear-gradient(135deg, #00F0FF, #B026FF);
32
+ transition: all 0.3s ease;
33
+ }
34
+ .btn-neon:hover {
35
+ transform: scale(1.05);
36
+ box-shadow: 0 0 40px rgba(0, 240, 255, 0.4);
37
+ }
38
+ .input-neon {
39
+ background: rgba(20, 20, 30, 0.6);
40
+ border: 1px solid rgba(0, 240, 255, 0.2);
41
+ transition: all 0.3s ease;
42
+ color: white;
43
+ }
44
+ .input-neon:focus {
45
+ border-color: #00F0FF;
46
+ box-shadow: 0 0 20px rgba(0, 240, 255, 0.2);
47
+ outline: none;
48
+ }
49
+ .vault-card {
50
+ background: rgba(20, 20, 30, 0.7);
51
+ backdrop-filter: blur(20px);
52
+ border: 1px solid rgba(0, 240, 255, 0.15);
53
+ border-radius: 20px;
54
+ transition: all 0.3s ease;
55
+ }
56
+ .vault-card:hover {
57
+ border-color: rgba(0, 240, 255, 0.4);
58
+ box-shadow: 0 0 30px rgba(0, 240, 255, 0.1);
59
+ transform: translateY(-5px);
60
+ }
61
+ .service-tag {
62
+ background: rgba(0, 240, 255, 0.1);
63
+ border: 1px solid rgba(0, 240, 255, 0.2);
64
+ border-radius: 10px;
65
+ padding: 6px 14px;
66
+ font-size: 12px;
67
+ color: #00F0FF;
68
+ display: inline-block;
69
+ margin: 4px;
70
+ }
71
+ .service-tag:hover {
72
+ background: rgba(0, 240, 255, 0.2);
73
+ box-shadow: 0 0 20px rgba(0, 240, 255, 0.1);
74
+ }
75
+ .hidden-data {
76
+ filter: blur(8px);
77
+ user-select: none;
78
+ transition: all 0.3s ease;
79
+ }
80
+ .hidden-data.revealed {
81
+ filter: blur(0);
82
+ user-select: text;
83
+ }
84
+ .reveal-btn {
85
+ background: rgba(255, 45, 149, 0.2);
86
+ border: 1px solid rgba(255, 45, 149, 0.3);
87
+ color: #FF2D95;
88
+ border-radius: 8px;
89
+ padding: 4px 12px;
90
+ font-size: 12px;
91
+ cursor: pointer;
92
+ transition: all 0.3s ease;
93
+ }
94
+ .reveal-btn:hover {
95
+ background: rgba(255, 45, 149, 0.3);
96
+ box-shadow: 0 0 20px rgba(255, 45, 149, 0.2);
97
+ }
98
+ .status-dot {
99
+ width: 8px;
100
+ height: 8px;
101
+ border-radius: 50%;
102
+ display: inline-block;
103
+ margin-left: 6px;
104
+ }
105
+ .status-connected {
106
+ background: #39FF14;
107
+ box-shadow: 0 0 10px rgba(57, 255, 20, 0.5);
108
+ }
109
+ .status-disconnected {
110
+ background: #FF2D95;
111
+ box-shadow: 0 0 10px rgba(255, 45, 149, 0.5);
112
+ }
113
+ .status-pending {
114
+ background: #FFE135;
115
+ box-shadow: 0 0 10px rgba(255, 225, 53, 0.5);
116
+ }
117
+ .copy-btn {
118
+ background: rgba(0, 240, 255, 0.1);
119
+ border: none;
120
+ color: #00F0FF;
121
+ cursor: pointer;
122
+ padding: 2px 8px;
123
+ border-radius: 4px;
124
+ font-size: 11px;
125
+ transition: all 0.3s ease;
126
+ }
127
+ .copy-btn:hover {
128
+ background: rgba(0, 240, 255, 0.2);
129
+ }
130
+ </style>
131
+ </head>
132
+ <body>
133
+
134
+ <div id="app" class="w-full max-w-7xl mx-auto p-4">
135
+ <!-- شاشة تسجيل الدخول -->
136
+ <div id="loginScreen" class="min-h-screen flex items-center justify-center">
137
+ <div class="glass neon-border neon-glow rounded-3xl p-10 w-full max-w-md">
138
+ <div class="text-center mb-8">
139
+ <div class="text-5xl mb-4 animate-pulse">🔐</div>
140
+ <h1 class="text-3xl font-bold text-white">نظام الخزنة الرقمية</h1>
141
+ <p class="text-gray-400 mt-2 text-sm">أدخل كلمة المرور للوصول إلى بياناتك</p>
142
+ </div>
143
+
144
+ <div class="space-y-4">
145
+ <input type="password" id="masterPassword"
146
+ class="input-neon w-full rounded-xl px-4 py-3 text-white text-center text-lg"
147
+ placeholder="••••••••" />
148
+ <button onclick="unlockVault()"
149
+ class="btn-neon w-full rounded-xl py-3 text-white font-bold text-lg transition-all">
150
+ 🚀 فتح الخزنة
151
+ </button>
152
+ </div>
153
+
154
+ <div id="loginError" class="text-red-500 text-center mt-4 text-sm hidden">
155
+ ❌ كلمة المرور غير صحيحة! حاول مرة أخرى.
156
+ </div>
157
+
158
+ <div class="mt-6 text-center text-gray-500 text-xs border-t border-gray-700 pt-4">
159
+ <span class="text-neon-cyan">●</span> نظام آمن ومشفر
160
+ </div>
161
+ </div>
162
+ </div>
163
+
164
+ <!-- المحتوى الرئيسي (يظهر بعد تسجيل الدخول) -->
165
+ <div id="mainContent" class="hidden">
166
+ <!-- الهيدر -->
167
+ <div class="glass neon-border rounded-2xl p-4 mb-6 flex flex-wrap items-center justify-between">
168
+ <div class="flex items-center gap-3">
169
+ <span class="text-2xl">🗄️</span>
170
+ <h1 class="text-xl font-bold text-white">الخزنة الرقمية</h1>
171
+ <span class="text-neon-cyan text-sm bg-neon-cyan/10 px-3 py-1 rounded-full">مقفل 🔒</span>
172
+ </div>
173
+ <div class="flex items-center gap-4">
174
+ <span class="text-gray-400 text-sm" id="userInfo">مرحباً بك</span>
175
+ <button onclick="logout()" class="text-neon-pink hover:text-pink-400 text-sm transition-colors">
176
+ 🚪 تسجيل خروج
177
+ </button>
178
+ </div>
179
+ </div>
180
+
181
+ <!-- شريط البحث والفلترة -->
182
+ <div class="glass neon-border rounded-2xl p-4 mb-6 flex flex-wrap gap-3 items-center">
183
+ <input type="text" id="searchInput" onkeyup="filterEmails()"
184
+ class="input-neon flex-1 min-w-[200px] rounded-xl px-4 py-2 text-white"
185
+ placeholder="🔍 بحث عن إيميل أو موقع..." />
186
+ <button onclick="addNewEmail()" class="btn-neon rounded-xl px-6 py-2 text-white font-bold">
187
+ ➕ إضافة إيميل
188
+ </button>
189
+ </div>
190
+
191
+ <!-- شبكة الإيميلات -->
192
+ <div id="emailsGrid" class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
193
+ <!-- سيتم إضافة الإيميلات ديناميكياً -->
194
+ </div>
195
+ </div>
196
+ </div>
197
+
198
+ <script>
199
+ // ============================================================
200
+ // 🔐 البيانات الأساسية (مشفرة داخل الكود)
201
+ // ============================================================
202
+
203
+ const MASTER_PASSWORD = 'Eissa2026';
204
+
205
+ // قائمة الإيميلات والبيانات المرتبطة بها
206
+ const emailData = [{
207
+ id: 1,
208
+ email: 'eissaaly07@gmail.com',
209
+ services: [
210
+ { name: 'Hangges', status: 'connected', link: 'https://hangges.com' },
211
+ { name: 'LinkedIn', status: 'connected', link: 'https://linkedin.com' },
212
+ { name: 'n8n', status: 'running', link: 'http://localhost:5678' },
213
+ { name: 'Docker', status: 'running', link: 'https://docker.com' },
214
+ { name: 'Grady', status: 'running', link: 'https://grady.com' },
215
+ { name: 'Supabase', status: 'connected', link: 'https://supabase.com', credentials: {
216
+ apiKey: 'sb_pub_xxxxxxxxxxxxx',
217
+ secretKey: 'sb_sec_xxxxxxxxxxxxx',
218
+ dbName: 'subscription_db',
219
+ dbPassword: 'Sup@base2026!',
220
+ url: 'https://xxxxxxxx.supabase.co'
221
+ } },
222
+ { name: 'GitHub', status: 'connected', link: 'https://github.com' },
223
+ { name: 'Hugging Face', status: 'connected', link: 'https://huggingface.co' },
224
+ { name: 'DeepSeek', status: 'connected', link: 'https://deepseek.com' },
225
+ { name: 'Gemini', status: 'connected', link: 'https://gemini.google.com' },
226
+ { name: 'Kemi', status: 'pending', link: 'https://kemi.com' }
227
+ ]
228
+ }, {
229
+ id: 2,
230
+ email: 'eissaaly0707@gmail.com',
231
+ services: [
232
+ { name: 'GitHub', status: 'connected', link: 'https://github.com' },
233
+ { name: 'Docker', status: 'running', link: 'https://docker.com' },
234
+ { name: 'Supabase', status: 'connected', link: 'https://supabase.com', credentials: {
235
+ apiKey: 'sb_pub_yyyyyyyyyyyyy',
236
+ secretKey: 'sb_sec_yyyyyyyyyyyyy',
237
+ dbName: 'analytics_db',
238
+ dbPassword: 'Analytics@2026!',
239
+ url: 'https://yyyyyyyy.supabase.co'
240
+ } },
241
+ { name: 'Hugging Face', status: 'connected', link: 'https://huggingface.co' },
242
+ { name: 'n8n', status: 'running', link: 'http://localhost:5679' }
243
+ ]
244
+ }, {
245
+ id: 3,
246
+ email: 'eissaaly@protonmail.com',
247
+ services: [
248
+ { name: 'ProtonMail', status: 'connected', link: 'https://protonmail.com' },
249
+ { name: 'DeepSeek', status: 'connected', link: 'https://deepseek.com' },
250
+ { name: 'Gemini', status: 'connected', link: 'https://gemini.google.com' },
251
+ { name: 'GitHub', status: 'connected', link: 'https://github.com' }
252
+ ]
253
+ }, {
254
+ id: 4,
255
+ email: 'eissaaly2@gmail.com',
256
+ services: [
257
+ { name: 'Hangges', status: 'connected', link: 'https://hangges.com' },
258
+ { name: 'n8n', status: 'running', link: 'http://localhost:5680' },
259
+ { name: 'Docker', status: 'running', link: 'https://docker.com' },
260
+ { name: 'Supabase', status: 'connected', link: 'https://supabase.com', credentials: {
261
+ apiKey: 'sb_pub_zzzzzzzzzzzzz',
262
+ secretKey: 'sb_sec_zzzzzzzzzzzzz',
263
+ dbName: 'production_db',
264
+ dbPassword: 'Prod@2026!',
265
+ url: 'https://zzzzzzzz.supabase.co'
266
+ } }
267
+ ]
268
+ }, {
269
+ id: 5,
270
+ email: 'eissaaly07070@gmail.com',
271
+ services: [
272
+ { name: 'GitHub', status: 'connected', link: 'https://github.com' },
273
+ { name: 'Hugging Face', status: 'connected', link: 'https://huggingface.co' },
274
+ { name: 'DeepSeek', status: 'connected', link: 'https://deepseek.com' },
275
+ { name: 'Kemi', status: 'pending', link: 'https://kemi.com' }
276
+ ]
277
+ }, {
278
+ id: 6,
279
+ email: 'eissaaly0007@gmail.com',
280
+ services: [
281
+ { name: 'Docker', status: 'running', link: 'https://docker.com' },
282
+ { name: 'Grady', status: 'running', link: 'https://grady.com' },
283
+ { name: 'Supabase', status: 'connected', link: 'https://supabase.com', credentials: {
284
+ apiKey: 'sb_pub_aaaaaaaaaaaaa',
285
+ secretKey: 'sb_sec_aaaaaaaaaaaaa',
286
+ dbName: 'test_db',
287
+ dbPassword: 'Test@2026!',
288
+ url: 'https://aaaaaaaa.supabase.co'
289
+ } },
290
+ { name: 'Gemini', status: 'connected', link: 'https://gemini.google.com' }
291
+ ]
292
+ }];
293
+
294
+ // ============================================================
295
+ // 🎯 دوال التحكم
296
+ // ============================================================
297
+
298
+ function unlockVault() {
299
+ const password = document.getElementById('masterPassword').value;
300
+ const errorEl = document.getElementById('loginError');
301
+
302
+ if (password === MASTER_PASSWORD) {
303
+ document.getElementById('loginScreen').classList.add('hidden');
304
+ document.getElementById('mainContent').classList.remove('hidden');
305
+ renderEmails();
306
+ errorEl.classList.add('hidden');
307
+ } else {
308
+ errorEl.classList.remove('hidden');
309
+ document.getElementById('masterPassword').value = '';
310
+ document.getElementById('masterPassword').focus();
311
+ }
312
+ }
313
+
314
+ function logout() {
315
+ document.getElementById('loginScreen').classList.remove('hidden');
316
+ document.getElementById('mainContent').classList.add('hidden');
317
+ document.getElementById('masterPassword').value = '';
318
+ document.getElementById('loginError').classList.add('hidden');
319
+ }
320
+
321
+ // ============================================================
322
+ // 📧 عرض الإيميلات
323
+ // ============================================================
324
+
325
+ function renderEmails(filter = '') {
326
+ const grid = document.getElementById('emailsGrid');
327
+ grid.innerHTML = '';
328
+
329
+ const filtered = emailData.filter(item =>
330
+ item.email.includes(filter.toLowerCase())
331
+ );
332
+
333
+ if (filtered.length === 0) {
334
+ grid.innerHTML = `
335
+ <div class="col-span-full text-center py-20">
336
+ <div class="text-6xl mb-4">🔍</div>
337
+ <h3 class="text-2xl text-gray-400">لا توجد نتائج</h3>
338
+ <p class="text-gray-500">جرب بحث آخر</p>
339
+ </div>
340
+ `;
341
+ return;
342
+ }
343
+
344
+ filtered.forEach(emailItem => {
345
+ const card = document.createElement('div');
346
+ card.className = 'vault-card p-5';
347
+ card.id = `email-${emailItem.id}`;
348
+
349
+ // رأس الإيميل
350
+ let servicesHtml = '';
351
+ emailItem.services.forEach(service => {
352
+ const statusClass = service.status === 'connected' ? 'status-connected' :
353
+ service.status === 'running' ? 'status-pending' :
354
+ 'status-disconnected';
355
+ const statusText = service.status === 'connected' ? 'متوصل' :
356
+ service.status === 'running' ? 'مشغل' :
357
+ 'قيد الانتظار';
358
+
359
+ let credentialsHtml = '';
360
+ if (service.credentials) {
361
+ credentialsHtml = `
362
+ <div class="mt-3 space-y-2 text-sm bg-black/30 rounded-xl p-3">
363
+ ${Object.entries(service.credentials).map(([key, value]) => `
364
+ <div class="flex items-center justify-between gap-2 border-b border-gray-700/50 pb-1">
365
+ <span class="text-gray-400 text-xs">${key}:</span>
366
+ <span class="text-neon-cyan text-xs hidden-data" data-value="${value}">${value}</span>
367
+ <button onclick="toggleReveal(this)" class="reveal-btn text-[10px]">👁️ إظهار</button>
368
+ <button onclick="copyText('${value}')" class="copy-btn text-[10px]">📋</button>
369
+ </div>
370
+ `).join('')}
371
+ </div>
372
+ `;
373
+ }
374
+
375
+ servicesHtml += `
376
+ <div class="bg-black/30 rounded-xl p-3 mb-2 hover:bg-black/50 transition-colors">
377
+ <div class="flex items-center justify-between flex-wrap gap-2">
378
+ <div class="flex items-center gap-2">
379
+ <span class="status-dot ${statusClass}"></span>
380
+ <span class="text-white font-medium">${service.name}</span>
381
+ <a href="${service.link}" target="_blank" class="text-neon-cyan text-xs hover:text-neon-pink transition-colors">
382
+ 🔗
383
+ </a>
384
+ </div>
385
+ <span class="text-xs text-gray-400">${statusText}</span>
386
+ </div>
387
+ ${credentialsHtml}
388
+ </div>
389
+ `;
390
+ });
391
+
392
+ card.innerHTML = `
393
+ <div class="flex items-start justify-between mb-4">
394
+ <div>
395
+ <h2 class="text-lg font-bold text-white flex items-center gap-2">
396
+ <span class="text-neon-cyan">📧</span>
397
+ ${emailItem.email}
398
+ </h2>
399
+ <span class="text-xs text-gray-500">${emailItem.services.length} خدمة</span>
400
+ </div>
401
+ <div class="flex gap-2">
402
+ <button onclick="editEmail(${emailItem.id})" class="text-xs text-neon-cyan hover:text-neon-pink transition-colors">✏️</button>
403
+ <button onclick="deleteEmail(${emailItem.id})" class="text-xs text-neon-pink hover:text-red-500 transition-colors">🗑️</button>
404
+ </div>
405
+ </div>
406
+ <div class="space-y-1">
407
+ ${servicesHtml}
408
+ </div>
409
+ <div class="mt-3 pt-3 border-t border-gray-700/50 flex justify-between items-center">
410
+ <button onclick="addService(${emailItem.id})" class="text-xs text-neon-cyan hover:text-neon-pink transition-colors">
411
+ ➕ إضافة خدمة
412
+ </button>
413
+ <span class="text-[10px] text-gray-600">ID: ${emailItem.id}</span>
414
+ </div>
415
+ `;
416
+
417
+ grid.appendChild(card);
418
+ });
419
+ }
420
+
421
+ // ============================================================
422
+ // 🔍 دوال البحث والفلترة
423
+ // ============================================================
424
+
425
+ function filterEmails() {
426
+ const search = document.getElementById('searchInput').value;
427
+ renderEmails(search);
428
+ }
429
+
430
+ // ============================================================
431
+ // 👁️ إظهار/إخفاء البيانات الحساسة
432
+ // ============================================================
433
+
434
+ function toggleReveal(btn) {
435
+ const parent = btn.parentElement;
436
+ const hiddenSpan = parent.querySelector('.hidden-data');
437
+ if (hiddenSpan) {
438
+ hiddenSpan.classList.toggle('revealed');
439
+ btn.textContent = hiddenSpan.classList.contains('revealed') ? '🙈 إخفاء' : '👁️ إظهار';
440
+ }
441
+ }
442
+
443
+ // ============================================================
444
+ // 📋 نسخ النص
445
+ // ============================================================
446
+
447
+ function copyText(text) {
448
+ navigator.clipboard.writeText(text).then(() => {
449
+ const toast = document.createElement('div');
450
+ toast.className = 'fixed bottom-4 right-4 glass neon-border text-neon-cyan px-4 py-2 rounded-xl text-sm z-50';
451
+ toast.textContent = '✅ تم النسخ!';
452
+ document.body.appendChild(toast);
453
+ setTimeout(() => toast.remove(), 2000);
454
+ }).catch(() => {
455
+ // Fallback
456
+ const textarea = document.createElement('textarea');
457
+ textarea.value = text;
458
+ document.body.appendChild(textarea);
459
+ textarea.select();
460
+ document.execCommand('copy');
461
+ textarea.remove();
462
+ const toast = document.createElement('div');
463
+ toast.className = 'fixed bottom-4 right-4 glass neon-border text-neon-cyan px-4 py-2 rounded-xl text-sm z-50';
464
+ toast.textContent = '✅ تم النسخ!';
465
+ document.body.appendChild(toast);
466
+ setTimeout(() => toast.remove(), 2000);
467
+ });
468
+ }
469
+
470
+ // ============================================================
471
+ // ➕ دوال الإضافة والحذف والتعديل
472
+ // ============================================================
473
+
474
+ function addNewEmail() {
475
+ const newEmail = prompt('✏️ أدخل الإيميل الجديد:');
476
+ if (newEmail && newEmail.includes('@')) {
477
+ emailData.push({
478
+ id: Date.now(),
479
+ email: newEmail,
480
+ services: []
481
+ });
482
+ renderEmails(document.getElementById('searchInput').value);
483
+ showToast('✅ تم إضافة الإيميل بنجاح!');
484
+ } else if (newEmail) {
485
+ alert('❌ من فضلك أدخل إيميل صحيح.');
486
+ }
487
+ }
488
+
489
+ function deleteEmail(id) {
490
+ if (confirm('⚠️ هل أنت متأكد من حذف هذا الإيميل وجميع بياناته؟')) {
491
+ const index = emailData.findIndex(e => e.id === id);
492
+ if (index > -1) {
493
+ emailData.splice(index, 1);
494
+ renderEmails(document.getElementById('searchInput').value);
495
+ showToast('🗑️ تم حذف الإيميل.');
496
+ }
497
+ }
498
+ }
499
+
500
+ function editEmail(id) {
501
+ const item = emailData.find(e => e.id === id);
502
+ if (item) {
503
+ const newEmail = prompt('✏️ تعديل الإيميل:', item.email);
504
+ if (newEmail && newEmail.includes('@')) {
505
+ item.email = newEmail;
506
+ renderEmails(document.getElementById('searchInput').value);
507
+ showToast('✅ تم تحديث الإيميل.');
508
+ }
509
+ }
510
+ }
511
+
512
+ function addService(emailId) {
513
+ const item = emailData.find(e => e.id === emailId);
514
+ if (item) {
515
+ const serviceName = prompt('✏️ اسم الخدمة:');
516
+ if (serviceName) {
517
+ const status = prompt('📊 الحالة (connected/running/pending):', 'connected');
518
+ const link = prompt('🔗 رابط الخدمة:', 'https://');
519
+ item.services.push({
520
+ name: serviceName,
521
+ status: status || 'pending',
522
+ link: link || '#'
523
+ });
524
+ renderEmails(document.getElementById('searchInput').value);
525
+ showToast('✅ تم إضافة الخدمة!');
526
+ }
527
+ }
528
+ }
529
+
530
+ // ============================================================
531
+ // 🍞 Toast notifications
532
+ // ============================================================
533
+
534
+ function showToast(message) {
535
+ const toast = document.createElement('div');
536
+ toast.className = 'fixed bottom-4 right-4 glass neon-border text-neon-cyan px-6 py-3 rounded-2xl text-sm z-50 shadow-neon-glow';
537
+ toast.textContent = message;
538
+ document.body.appendChild(toast);
539
+ setTimeout(() => {
540
+ toast.style.opacity = '0';
541
+ toast.style.transition = 'all 0.5s ease';
542
+ setTimeout(() => toast.remove(), 500);
543
+ }, 2500);
544
+ }
545
+
546
+ // ============================================================
547
+ // ⌨️ دعم Enter في حقل كلمة المرور
548
+ // ============================================================
549
+
550
+ document.getElementById('masterPassword').addEventListener('keydown', function(e) {
551
+ if (e.key === 'Enter') {
552
+ unlockVault();
553
+ }
554
+ });
555
+
556
+ // ============================================================
557
+ // 📦 تهيئة أولية
558
+ // ============================================================
559
+
560
+ renderEmails();
561
+
562
+ console.log('✅ نظام الخزنة الرقمية جاهز!');
563
+ console.log('📧 عدد الإيميلات:', emailData.length);
564
+ console.log('🔐 كلمة المرور: Eissa2026');
565
+ </script>
566
+
567
+ </body>
568
+ </html>