CORVO-AI commited on
Commit
cef421c
·
verified ·
1 Parent(s): 121e4b0

Upload 2 files

Browse files
Files changed (2) hide show
  1. templates/dashboard.html +0 -0
  2. templates/settings.html +1150 -0
templates/dashboard.html ADDED
The diff for this file is too large to render. See raw diff
 
templates/settings.html ADDED
@@ -0,0 +1,1150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>إعدادات نظام تحليل الفوركس الذكي</title>
7
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
8
+ <link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700&display=swap" rel="stylesheet">
9
+ <style>
10
+ :root {
11
+ --primary: #2c3e50;
12
+ --primary-light: #34495e;
13
+ --primary-dark: #1a2530;
14
+ --secondary: #3498db;
15
+ --secondary-light: #5dade2;
16
+ --secondary-dark: #2980b9;
17
+ --accent: #f39c12;
18
+ --accent-light: #f5b041;
19
+ --accent-dark: #d68910;
20
+ --success: #2ecc71;
21
+ --success-light: #58d68d;
22
+ --success-dark: #27ae60;
23
+ --danger: #e74c3c;
24
+ --danger-light: #ec7063;
25
+ --danger-dark: #c0392b;
26
+ --warning: #f1c40f;
27
+ --warning-light: #f4d03f;
28
+ --warning-dark: #d4ac0d;
29
+ --info: #1abc9c;
30
+ --info-light: #48c9b0;
31
+ --info-dark: #16a085;
32
+ --text: #ecf0f1;
33
+ --text-dark: #bdc3c7;
34
+ --text-darker: #95a5a6;
35
+ --background: #121a24;
36
+ --card-bg: #1e2a38;
37
+ --card-border: #2c3e50;
38
+ --card-highlight: #3a506b;
39
+ --shadow-color: rgba(0, 0, 0, 0.5);
40
+ --glow-color: rgba(52, 152, 219, 0.4);
41
+ }
42
+
43
+ * {
44
+ margin: 0;
45
+ padding: 0;
46
+ box-sizing: border-box;
47
+ font-family: 'Tajawal', sans-serif;
48
+ }
49
+
50
+ body {
51
+ background: var(--background);
52
+ color: var(--text);
53
+ min-height: 100vh;
54
+ overflow-x: hidden;
55
+ }
56
+
57
+ /* Scrollbar Styling */
58
+ ::-webkit-scrollbar {
59
+ width: 8px;
60
+ height: 8px;
61
+ }
62
+
63
+ ::-webkit-scrollbar-track {
64
+ background: var(--primary-dark);
65
+ border-radius: 4px;
66
+ }
67
+
68
+ ::-webkit-scrollbar-thumb {
69
+ background: var(--secondary-dark);
70
+ border-radius: 4px;
71
+ }
72
+
73
+ ::-webkit-scrollbar-thumb:hover {
74
+ background: var(--secondary);
75
+ }
76
+
77
+ /* Password Modal */
78
+ .password-modal {
79
+ position: fixed;
80
+ top: 0;
81
+ left: 0;
82
+ width: 100%;
83
+ height: 100%;
84
+ background: rgba(0, 0, 0, 0.85);
85
+ backdrop-filter: blur(10px);
86
+ display: flex;
87
+ justify-content: center;
88
+ align-items: center;
89
+ z-index: 1000;
90
+ opacity: 1;
91
+ transition: opacity 0.5s ease;
92
+ }
93
+
94
+ .password-modal.hidden {
95
+ opacity: 0;
96
+ pointer-events: none;
97
+ }
98
+
99
+ .password-box {
100
+ background: var(--card-bg);
101
+ padding: 40px;
102
+ border-radius: 20px;
103
+ text-align: center;
104
+ box-shadow: 0 20px 40px var(--shadow-color);
105
+ max-width: 400px;
106
+ width: 90%;
107
+ border: 1px solid var(--card-border);
108
+ transform: translateY(0);
109
+ transition: transform 0.5s ease;
110
+ position: relative;
111
+ overflow: hidden;
112
+ }
113
+
114
+ .password-box::before {
115
+ content: '';
116
+ position: absolute;
117
+ top: -50%;
118
+ left: -50%;
119
+ width: 200%;
120
+ height: 200%;
121
+ background: radial-gradient(circle, var(--secondary-dark) 0%, transparent 70%);
122
+ opacity: 0.1;
123
+ z-index: -1;
124
+ animation: pulse 15s infinite;
125
+ }
126
+
127
+ @keyframes pulse {
128
+ 0% { transform: translate(0, 0); opacity: 0.1; }
129
+ 50% { transform: translate(-30px, -30px); opacity: 0.15; }
130
+ 100% { transform: translate(0, 0); opacity: 0.1; }
131
+ }
132
+
133
+ .password-modal.hidden .password-box {
134
+ transform: translateY(50px);
135
+ }
136
+
137
+ .password-box h2 {
138
+ color: var(--text);
139
+ margin-bottom: 30px;
140
+ font-size: 28px;
141
+ position: relative;
142
+ display: inline-block;
143
+ }
144
+
145
+ .password-box h2::after {
146
+ content: '';
147
+ position: absolute;
148
+ bottom: -10px;
149
+ left: 0;
150
+ width: 100%;
151
+ height: 3px;
152
+ background: linear-gradient(to right, transparent, var(--secondary), transparent);
153
+ }
154
+
155
+ .password-input {
156
+ width: 100%;
157
+ padding: 16px 20px;
158
+ border: 2px solid var(--card-border);
159
+ background: var(--primary-dark);
160
+ border-radius: 12px;
161
+ font-size: 16px;
162
+ margin-bottom: 25px;
163
+ text-align: center;
164
+ color: var(--text);
165
+ transition: all 0.3s ease;
166
+ outline: none;
167
+ }
168
+
169
+ .password-input:focus {
170
+ border-color: var(--secondary);
171
+ box-shadow: 0 0 0 3px var(--glow-color);
172
+ }
173
+
174
+ .password-btn {
175
+ background: linear-gradient(135deg, var(--secondary), var(--secondary-dark));
176
+ color: white;
177
+ border: none;
178
+ padding: 16px 30px;
179
+ border-radius: 12px;
180
+ font-size: 16px;
181
+ font-weight: 600;
182
+ cursor: pointer;
183
+ width: 100%;
184
+ transition: all 0.3s ease;
185
+ position: relative;
186
+ overflow: hidden;
187
+ }
188
+
189
+ .password-btn::before {
190
+ content: '';
191
+ position: absolute;
192
+ top: 0;
193
+ left: -100%;
194
+ width: 100%;
195
+ height: 100%;
196
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
197
+ transition: all 0.5s ease;
198
+ }
199
+
200
+ .password-btn:hover::before {
201
+ left: 100%;
202
+ }
203
+
204
+ .password-btn:hover {
205
+ background: linear-gradient(135deg, var(--secondary-light), var(--secondary));
206
+ transform: translateY(-2px);
207
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
208
+ }
209
+
210
+ .container {
211
+ max-width: 1200px;
212
+ margin: 0 auto;
213
+ padding: 20px;
214
+ opacity: 0;
215
+ transform: translateY(20px);
216
+ transition: opacity 0.5s ease, transform 0.5s ease;
217
+ }
218
+
219
+ .container.visible {
220
+ opacity: 1;
221
+ transform: translateY(0);
222
+ }
223
+
224
+ .container.hidden {
225
+ display: none !important;
226
+ }
227
+
228
+ .header {
229
+ padding: 20px 0;
230
+ border-bottom: 1px solid var(--card-border);
231
+ margin-bottom: 30px;
232
+ display: flex;
233
+ align-items: center;
234
+ justify-content: space-between;
235
+ flex-wrap: wrap;
236
+ gap: 20px;
237
+ }
238
+
239
+ .logo {
240
+ display: flex;
241
+ align-items: center;
242
+ gap: 15px;
243
+ }
244
+
245
+ .logo-icon {
246
+ font-size: 40px;
247
+ color: var(--accent);
248
+ background: var(--primary-dark);
249
+ width: 70px;
250
+ height: 70px;
251
+ display: flex;
252
+ align-items: center;
253
+ justify-content: center;
254
+ border-radius: 16px;
255
+ position: relative;
256
+ overflow: hidden;
257
+ }
258
+
259
+ .logo-icon::after {
260
+ content: '';
261
+ position: absolute;
262
+ width: 100%;
263
+ height: 30%;
264
+ background: linear-gradient(to bottom, var(--accent-light), transparent);
265
+ top: 0;
266
+ left: 0;
267
+ opacity: 0.3;
268
+ }
269
+
270
+ .logo-text h1 {
271
+ font-size: clamp(24px, 5vw, 32px);
272
+ font-weight: 700;
273
+ margin-bottom: 5px;
274
+ background: linear-gradient(to right, var(--secondary-light), var(--accent-light));
275
+ -webkit-background-clip: text;
276
+ -webkit-text-fill-color: transparent;
277
+ position: relative;
278
+ }
279
+
280
+ .logo-text p {
281
+ font-size: 14px;
282
+ color: var(--text-dark);
283
+ font-weight: 500;
284
+ }
285
+
286
+ .back-btn {
287
+ background: linear-gradient(135deg, var(--secondary), var(--secondary-dark));
288
+ color: white;
289
+ padding: 12px 25px;
290
+ border: none;
291
+ border-radius: 12px;
292
+ text-decoration: none;
293
+ font-size: 16px;
294
+ font-weight: 600;
295
+ display: inline-flex;
296
+ align-items: center;
297
+ gap: 10px;
298
+ transition: all 0.3s ease;
299
+ position: relative;
300
+ overflow: hidden;
301
+ }
302
+
303
+ .back-btn::before {
304
+ content: '';
305
+ position: absolute;
306
+ top: 0;
307
+ left: -100%;
308
+ width: 100%;
309
+ height: 100%;
310
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
311
+ transition: all 0.5s ease;
312
+ }
313
+
314
+ .back-btn:hover::before {
315
+ left: 100%;
316
+ }
317
+
318
+ .back-btn:hover {
319
+ transform: translateY(-3px);
320
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
321
+ }
322
+
323
+ .settings-section {
324
+ background: var(--card-bg);
325
+ border-radius: 20px;
326
+ padding: 30px;
327
+ margin-bottom: 30px;
328
+ box-shadow: 0 15px 35px var(--shadow-color);
329
+ border: 1px solid var(--card-border);
330
+ position: relative;
331
+ overflow: hidden;
332
+ }
333
+
334
+ .settings-section::before {
335
+ content: '';
336
+ position: absolute;
337
+ top: 0;
338
+ left: 0;
339
+ width: 100%;
340
+ height: 5px;
341
+ background: linear-gradient(to right, var(--secondary), var(--accent));
342
+ }
343
+
344
+ .section-header {
345
+ display: flex;
346
+ align-items: center;
347
+ margin-bottom: 25px;
348
+ padding-bottom: 15px;
349
+ border-bottom: 1px solid var(--card-border);
350
+ }
351
+
352
+ .section-title {
353
+ font-size: 22px;
354
+ font-weight: 700;
355
+ color: var(--text);
356
+ display: flex;
357
+ align-items: center;
358
+ gap: 12px;
359
+ }
360
+
361
+ .section-title i {
362
+ color: var(--accent);
363
+ font-size: 24px;
364
+ }
365
+
366
+ .form-grid {
367
+ display: grid;
368
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
369
+ gap: 25px;
370
+ }
371
+
372
+ .form-group {
373
+ margin-bottom: 20px;
374
+ }
375
+
376
+ .form-group label {
377
+ display: block;
378
+ font-weight: 600;
379
+ margin-bottom: 10px;
380
+ color: var(--text);
381
+ font-size: 15px;
382
+ }
383
+
384
+ .form-control {
385
+ width: 100%;
386
+ padding: 15px;
387
+ border: 2px solid var(--card-border);
388
+ background: var(--primary-dark);
389
+ border-radius: 12px;
390
+ font-size: 15px;
391
+ color: var(--text);
392
+ transition: all 0.3s ease;
393
+ outline: none;
394
+ }
395
+
396
+ .form-control:focus {
397
+ border-color: var(--secondary);
398
+ box-shadow: 0 0 0 3px var(--glow-color);
399
+ }
400
+
401
+ select.form-control {
402
+ appearance: none;
403
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23bdc3c7' viewBox='0 0 16 16'%3E%3Cpath d='M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z'/%3E%3C/svg%3E");
404
+ background-repeat: no-repeat;
405
+ background-position: left 15px center;
406
+ background-size: 16px 16px;
407
+ padding-left: 40px;
408
+ }
409
+
410
+ .input-group {
411
+ display: flex;
412
+ gap: 10px;
413
+ }
414
+
415
+ .input-group .form-control {
416
+ flex: 1;
417
+ }
418
+
419
+ .input-group-text {
420
+ display: flex;
421
+ align-items: center;
422
+ justify-content: center;
423
+ padding: 0 15px;
424
+ color: var(--text-dark);
425
+ font-size: 15px;
426
+ }
427
+
428
+ .checkbox-group {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: 10px;
432
+ margin-top: 10px;
433
+ cursor: pointer;
434
+ }
435
+
436
+ .checkbox-group input[type="checkbox"] {
437
+ appearance: none;
438
+ -webkit-appearance: none;
439
+ width: 22px;
440
+ height: 22px;
441
+ background: var(--primary-dark);
442
+ border: 2px solid var(--card-border);
443
+ border-radius: 6px;
444
+ position: relative;
445
+ cursor: pointer;
446
+ transition: all 0.3s ease;
447
+ }
448
+
449
+ .checkbox-group input[type="checkbox"]:checked {
450
+ background: var(--secondary);
451
+ border-color: var(--secondary);
452
+ }
453
+
454
+ .checkbox-group input[type="checkbox"]:checked::after {
455
+ content: '✓';
456
+ position: absolute;
457
+ top: 50%;
458
+ left: 50%;
459
+ transform: translate(-50%, -50%);
460
+ color: white;
461
+ font-size: 14px;
462
+ font-weight: bold;
463
+ }
464
+
465
+ .checkbox-group input[type="checkbox"]:focus {
466
+ box-shadow: 0 0 0 3px var(--glow-color);
467
+ }
468
+
469
+ .checkbox-group label {
470
+ margin-bottom: 0;
471
+ cursor: pointer;
472
+ display: flex;
473
+ align-items: center;
474
+ gap: 8px;
475
+ }
476
+
477
+ .checkbox-group label i {
478
+ color: var(--secondary);
479
+ }
480
+
481
+ .pairs-selector {
482
+ margin-top: 30px;
483
+ }
484
+
485
+ .pairs-grid {
486
+ display: grid;
487
+ grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
488
+ gap: 15px;
489
+ margin-top: 20px;
490
+ }
491
+
492
+ .pair-item {
493
+ position: relative;
494
+ background: var(--primary-dark);
495
+ border: 2px solid var(--card-border);
496
+ border-radius: 12px;
497
+ padding: 15px 10px;
498
+ text-align: center;
499
+ transition: all 0.3s ease;
500
+ cursor: pointer;
501
+ overflow: hidden;
502
+ }
503
+
504
+ .pair-item:hover {
505
+ transform: translateY(-3px);
506
+ border-color: var(--secondary-light);
507
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
508
+ }
509
+
510
+ .pair-item input[type="checkbox"] {
511
+ position: absolute;
512
+ opacity: 0;
513
+ cursor: pointer;
514
+ height: 0;
515
+ width: 0;
516
+ }
517
+
518
+ .pair-item input[type="checkbox"]:checked + .pair-label {
519
+ color: var(--secondary-light);
520
+ font-weight: bold;
521
+ }
522
+
523
+ .pair-item input[type="checkbox"]:checked ~ .pair-checkmark {
524
+ opacity: 1;
525
+ transform: scale(1);
526
+ }
527
+
528
+ .pair-item input[type="checkbox"]:checked ~ .pair-bg {
529
+ opacity: 0.15;
530
+ }
531
+
532
+ .pair-label {
533
+ position: relative;
534
+ z-index: 2;
535
+ font-weight: 600;
536
+ color: var(--text);
537
+ transition: all 0.3s ease;
538
+ }
539
+
540
+ .pair-checkmark {
541
+ position: absolute;
542
+ top: 10px;
543
+ right: 10px;
544
+ width: 20px;
545
+ height: 20px;
546
+ background: var(--secondary);
547
+ border-radius: 50%;
548
+ display: flex;
549
+ align-items: center;
550
+ justify-content: center;
551
+ color: white;
552
+ font-size: 12px;
553
+ opacity: 0;
554
+ transform: scale(0);
555
+ transition: all 0.3s ease;
556
+ z-index: 2;
557
+ }
558
+
559
+ .pair-bg {
560
+ position: absolute;
561
+ top: 0;
562
+ left: 0;
563
+ width: 100%;
564
+ height: 100%;
565
+ background: var(--secondary);
566
+ opacity: 0;
567
+ transition: all 0.3s ease;
568
+ z-index: 1;
569
+ }
570
+
571
+ .save-btn {
572
+ background: linear-gradient(135deg, var(--success), var(--success-dark));
573
+ color: white;
574
+ border: none;
575
+ padding: 16px 30px;
576
+ border-radius: 12px;
577
+ font-size: 16px;
578
+ font-weight: 600;
579
+ cursor: pointer;
580
+ transition: all 0.3s ease;
581
+ display: inline-flex;
582
+ align-items: center;
583
+ gap: 10px;
584
+ margin-top: 30px;
585
+ position: relative;
586
+ overflow: hidden;
587
+ }
588
+
589
+ .save-btn::before {
590
+ content: '';
591
+ position: absolute;
592
+ top: 0;
593
+ left: -100%;
594
+ width: 100%;
595
+ height: 100%;
596
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
597
+ transition: all 0.5s ease;
598
+ }
599
+
600
+ .save-btn:hover::before {
601
+ left: 100%;
602
+ }
603
+
604
+ .save-btn:hover {
605
+ transform: translateY(-3px);
606
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
607
+ }
608
+
609
+ .notification {
610
+ position: fixed;
611
+ bottom: 30px;
612
+ right: 30px;
613
+ background: var(--card-bg);
614
+ border-radius: 12px;
615
+ padding: 20px;
616
+ box-shadow: 0 10px 30px var(--shadow-color);
617
+ border-right: 4px solid var(--secondary);
618
+ max-width: 350px;
619
+ transform: translateX(400px);
620
+ opacity: 0;
621
+ transition: all 0.5s ease;
622
+ z-index: 1000;
623
+ display: flex;
624
+ align-items: flex-start;
625
+ gap: 15px;
626
+ }
627
+
628
+ .notification.show {
629
+ transform: translateX(0);
630
+ opacity: 1;
631
+ }
632
+
633
+ .notification-icon {
634
+ width: 40px;
635
+ height: 40px;
636
+ border-radius: 50%;
637
+ background: rgba(52, 152, 219, 0.2);
638
+ color: var(--secondary);
639
+ display: flex;
640
+ align-items: center;
641
+ justify-content: center;
642
+ font-size: 18px;
643
+ flex-shrink: 0;
644
+ }
645
+
646
+ .notification-content {
647
+ flex-grow: 1;
648
+ }
649
+
650
+ .notification-title {
651
+ font-size: 16px;
652
+ font-weight: 600;
653
+ margin-bottom: 5px;
654
+ color: var(--text);
655
+ }
656
+
657
+ .notification-message {
658
+ font-size: 14px;
659
+ color: var(--text-dark);
660
+ }
661
+
662
+ .notification-close {
663
+ position: absolute;
664
+ top: 10px;
665
+ right: 10px;
666
+ color: var(--text-darker);
667
+ cursor: pointer;
668
+ font-size: 14px;
669
+ transition: all 0.3s ease;
670
+ }
671
+
672
+ .notification-close:hover {
673
+ color: var(--text);
674
+ }
675
+
676
+ .notification.success .notification-icon {
677
+ background: rgba(46, 204, 113, 0.2);
678
+ color: var(--success);
679
+ }
680
+
681
+ .notification.success {
682
+ border-right-color: var(--success);
683
+ }
684
+
685
+ .notification.error .notification-icon {
686
+ background: rgba(231, 76, 60, 0.2);
687
+ color: var(--danger);
688
+ }
689
+
690
+ .notification.error {
691
+ border-right-color: var(--danger);
692
+ }
693
+
694
+ .notification.warning .notification-icon {
695
+ background: rgba(241, 196, 15, 0.2);
696
+ color: var(--warning);
697
+ }
698
+
699
+ .notification.warning {
700
+ border-right-color: var(--warning);
701
+ }
702
+
703
+ /* Admin section */
704
+ .admin-section {
705
+ margin-top: 50px;
706
+ padding-top: 30px;
707
+ border-top: 1px dashed var(--card-border);
708
+ }
709
+
710
+ .admin-title {
711
+ color: var(--danger-light);
712
+ font-size: 18px;
713
+ margin-bottom: 20px;
714
+ display: flex;
715
+ align-items: center;
716
+ gap: 10px;
717
+ }
718
+
719
+ .admin-form {
720
+ background: rgba(231, 76, 60, 0.1);
721
+ border: 1px dashed var(--danger);
722
+ border-radius: 12px;
723
+ padding: 20px;
724
+ }
725
+
726
+ /* Mobile Responsiveness */
727
+ @media (max-width: 768px) {
728
+ .container {
729
+ padding: 15px;
730
+ }
731
+
732
+ .header {
733
+ flex-direction: column;
734
+ align-items: flex-start;
735
+ }
736
+
737
+ .logo {
738
+ width: 100%;
739
+ justify-content: center;
740
+ }
741
+
742
+ .back-btn {
743
+ width: 100%;
744
+ justify-content: center;
745
+ }
746
+
747
+ .form-grid {
748
+ grid-template-columns: 1fr;
749
+ gap: 15px;
750
+ }
751
+
752
+ .pairs-grid {
753
+ grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
754
+ }
755
+
756
+ .save-btn {
757
+ width: 100%;
758
+ justify-content: center;
759
+ }
760
+
761
+ .notification {
762
+ left: 20px;
763
+ right: 20px;
764
+ max-width: none;
765
+ }
766
+ }
767
+
768
+ @media (max-width: 480px) {
769
+ .container {
770
+ padding: 10px;
771
+ }
772
+
773
+ .settings-section {
774
+ padding: 20px 15px;
775
+ }
776
+
777
+ .section-title {
778
+ font-size: 18px;
779
+ }
780
+
781
+ .pairs-grid {
782
+ grid-template-columns: repeat(2, 1fr);
783
+ }
784
+
785
+ .input-group {
786
+ flex-direction: column;
787
+ }
788
+
789
+ .password-box {
790
+ padding: 30px 20px;
791
+ }
792
+ }
793
+ </style>
794
+ </head>
795
+ <body>
796
+ <!-- Password Modal -->
797
+ <div class="password-modal" id="passwordModal">
798
+ <div class="password-box">
799
+ <h2><i class="fas fa-lock"></i> تسجيل الدخول</h2>
800
+ <input type="password" class="password-input" id="passwordInput" placeholder="أدخل كلمة المرور">
801
+ <button class="password-btn" onclick="checkPassword()">
802
+ <i class="fas fa-sign-in-alt"></i> دخول
803
+ </button>
804
+ </div>
805
+ </div>
806
+
807
+ <!-- Notification -->
808
+ <div class="notification" id="notification">
809
+ <div class="notification-icon">
810
+ <i class="fas fa-info-circle"></i>
811
+ </div>
812
+ <div class="notification-content">
813
+ <div class="notification-title" id="notificationTitle">تم التحديث</div>
814
+ <div class="notification-message" id="notificationMessage">تم تحديث البيانات بنجاح</div>
815
+ </div>
816
+ <div class="notification-close" onclick="hideNotification()">
817
+ <i class="fas fa-times"></i>
818
+ </div>
819
+ </div>
820
+
821
+ <div class="container hidden" id="mainContent">
822
+ <div class="header">
823
+ <div class="logo">
824
+ <div class="logo-icon">
825
+ <i class="fas fa-cog"></i>
826
+ </div>
827
+ <div class="logo-text">
828
+ <h1>إعدادات نظام تحليل الفوركس</h1>
829
+ <p>تخصيص معلمات التداول وأزواج العملات</p>
830
+ </div>
831
+ </div>
832
+ <a href="/" class="back-btn">
833
+ <i class="fas fa-arrow-right"></i> العودة إلى لوحة التحكم
834
+ </a>
835
+ </div>
836
+
837
+ <form method="POST" action="/update-settings" id="settingsForm">
838
+ <div class="settings-section">
839
+ <div class="section-header">
840
+ <div class="section-title">
841
+ <i class="fas fa-chart-bar"></i> معلمات التداول
842
+ </div>
843
+ </div>
844
+ <div class="form-grid">
845
+ <div class="form-group">
846
+ <label>نطاق وقف الخس��رة (نقاط):</label>
847
+ <div class="input-group">
848
+ <input type="number" name="stop_loss_min" value="{{ settings.stop_loss_min }}" min="10" max="100" class="form-control" placeholder="الحد الأدنى">
849
+ <div class="input-group-text">إلى</div>
850
+ <input type="number" name="stop_loss_max" value="{{ settings.stop_loss_max }}" min="10" max="100" class="form-control" placeholder="الحد الأقصى">
851
+ </div>
852
+ </div>
853
+
854
+ <div class="form-group">
855
+ <label>نطاق جني الأرباح (نقاط):</label>
856
+ <div class="input-group">
857
+ <input type="number" name="take_profit_min" value="{{ settings.take_profit_min }}" min="20" max="200" class="form-control" placeholder="الحد الأدنى">
858
+ <div class="input-group-text">إلى</div>
859
+ <input type="number" name="take_profit_max" value="{{ settings.take_profit_max }}" min="20" max="200" class="form-control" placeholder="الحد الأقصى">
860
+ </div>
861
+ </div>
862
+
863
+ <div class="form-group">
864
+ <label><i class="fas fa-clock"></i> مدة الصفقة القصوى (ساعات):</label>
865
+ <input type="number" name="max_trade_duration" value="{{ settings.max_trade_duration }}" min="1" max="24" class="form-control">
866
+ </div>
867
+
868
+ <div class="form-group">
869
+ <label><i class="fas fa-percentage"></i> نسبة المخاطرة (%):</label>
870
+ <input type="number" step="0.1" name="risk_percentage" value="{{ settings.risk_percentage }}" min="0.5" max="10" class="form-control">
871
+ </div>
872
+
873
+ <div class="form-group">
874
+ <label><i class="fas fa-bullseye"></i> الحد الأدنى للثقة (%):</label>
875
+ <input type="number" name="min_confidence" value="{{ settings.min_confidence }}" min="50" max="95" class="form-control">
876
+ </div>
877
+
878
+ <div class="form-group">
879
+ <label><i class="fas fa-arrows-alt-h"></i> اتجاه التداول:</label>
880
+ <select name="trade_direction" class="form-control">
881
+ <option value="both" {% if settings.trade_direction == 'both' %}selected{% endif %}>شراء وبيع</option>
882
+ <option value="buy" {% if settings.trade_direction == 'buy' %}selected{% endif %}>شراء فقط</option>
883
+ <option value="sell" {% if settings.trade_direction == 'sell' %}selected{% endif %}>بيع فقط</option>
884
+ </select>
885
+ </div>
886
+
887
+ <div class="form-group">
888
+ <label><i class="fas fa-hashtag"></i> الحد الأقصى للصفقات اليومية:</label>
889
+ <input type="number" name="max_daily_trades" value="{{ settings.max_daily_trades }}" min="1" max="20" class="form-control">
890
+ </div>
891
+
892
+ <div class="form-group">
893
+ <label><i class="fas fa-business-time"></i> ساعات التداول:</label>
894
+ <div class="input-group">
895
+ <input type="number" name="trading_hours_start" value="{{ settings.trading_hours_start }}" min="0" max="23" class="form-control" placeholder="البداية">
896
+ <div class="input-group-text">إلى</div>
897
+ <input type="number" name="trading_hours_end" value="{{ settings.trading_hours_end }}" min="0" max="23" class="form-control" placeholder="النهاية">
898
+ </div>
899
+ </div>
900
+
901
+ <div class="form-group">
902
+ <label>نطاق السبريد (نقاط):</label>
903
+ <div class="input-group">
904
+ <input type="number" step="0.1" name="min_spread" value="{{ settings.min_spread }}" min="0" max="10" class="form-control" placeholder="الحد الأدنى">
905
+ <div class="input-group-text">إلى</div>
906
+ <input type="number" step="0.1" name="max_spread" value="{{ settings.max_spread }}" min="0" max="20" class="form-control" placeholder="الحد الأقصى">
907
+ </div>
908
+ </div>
909
+ </div>
910
+
911
+ <div class="form-group">
912
+ <div class="checkbox-group">
913
+ <input type="checkbox" name="avoid_news_events" id="avoid_news" {% if settings.avoid_news_events %}checked{% endif %}>
914
+ <label for="avoid_news"><i class="fas fa-newspaper"></i> تجنب التداول خلال الأخبار الاقتصادية</label>
915
+ </div>
916
+ </div>
917
+ </div>
918
+
919
+ <div class="settings-section">
920
+ <div class="section-header">
921
+ <div class="section-title">
922
+ <i class="fas fa-coins"></i> أزواج العملات للتحليل
923
+ </div>
924
+ </div>
925
+ <p>اختر من 2 إلى 8 أزواج عملات للتحليل التلقائي</p>
926
+
927
+ <div class="pairs-grid">
928
+ {% for pair in all_pairs %}
929
+ <div class="pair-item">
930
+ <input type="checkbox" id="pair-{{ pair }}" name="selected_pairs" value="{{ pair }}" {% if pair in selected_pairs %}checked{% endif %}>
931
+ <label class="pair-label" for="pair-{{ pair }}">{{ pair }}</label>
932
+ <div class="pair-checkmark"><i class="fas fa-check"></i></div>
933
+ <div class="pair-bg"></div>
934
+ </div>
935
+ {% endfor %}
936
+ </div>
937
+
938
+ <div class="form-group" style="margin-top: 30px;">
939
+ <button type="submit" class="save-btn">
940
+ <i class="fas fa-save"></i> حفظ الإعدادات
941
+ </button>
942
+ </div>
943
+ </div>
944
+ </form>
945
+
946
+ <div class="admin-section">
947
+ <div class="section-header">
948
+ <div class="section-title">
949
+ <i class="fas fa-user-shield"></i> إعدادات المطور
950
+ </div>
951
+ </div>
952
+
953
+ <div class="admin-controls">
954
+ <div class="admin-control-item">
955
+ <label>تعديل الفاصل الزمني للتحليل (بالدقائق):</label>
956
+ <div class="input-group">
957
+ <input type="number" id="analysisInterval" value="{{ analysis_interval }}" min="5" max="240" class="form-control">
958
+ <input type="password" id="adminPassword" placeholder="كلمة مرور المشرف" class="form-control">
959
+ <button type="button" id="updateIntervalBtn" class="admin-btn">
960
+ <i class="fas fa-save"></i> تحديث
961
+ </button>
962
+ </div>
963
+ <small class="form-text">الفاصل الزمني الحالي: {{ analysis_interval }} دقيقة</small>
964
+ </div>
965
+ </div>
966
+ </div>
967
+ </div>
968
+
969
+ <script>
970
+ let isAuthenticated = false;
971
+
972
+ // Check if user is already authenticated
973
+ function checkAuthStatus() {
974
+ const authStatus = localStorage.getItem('forex_auth');
975
+ if (authStatus === 'authenticated') {
976
+ isAuthenticated = true;
977
+ showMainContent();
978
+ } else {
979
+ showPasswordModal();
980
+ }
981
+ }
982
+
983
+ function showPasswordModal() {
984
+ document.getElementById('passwordModal').classList.remove('hidden');
985
+ document.getElementById('mainContent').classList.add('hidden');
986
+ document.getElementById('passwordInput').focus();
987
+ }
988
+
989
+ function showMainContent() {
990
+ document.getElementById('passwordModal').classList.add('hidden');
991
+
992
+ // Delay showing content for animation
993
+ setTimeout(() => {
994
+ document.getElementById('mainContent').classList.remove('hidden');
995
+ setTimeout(() => {
996
+ document.getElementById('mainContent').classList.add('visible');
997
+ }, 100);
998
+ }, 300);
999
+ }
1000
+
1001
+ function checkPassword() {
1002
+ const password = document.getElementById('passwordInput').value;
1003
+ if (password === 'hakim1234') {
1004
+ isAuthenticated = true;
1005
+ localStorage.setItem('forex_auth', 'authenticated');
1006
+ showMainContent();
1007
+ } else {
1008
+ showNotification('خطأ', 'كلمة المرور غير صحيحة!', 'error');
1009
+ document.getElementById('passwordInput').value = '';
1010
+ }
1011
+ }
1012
+
1013
+ function showNotification(title, message, type = 'info') {
1014
+ const notification = document.getElementById('notification');
1015
+ const notificationTitle = document.getElementById('notificationTitle');
1016
+ const notificationMessage = document.getElementById('notificationMessage');
1017
+ const notificationIcon = notification.querySelector('.notification-icon i');
1018
+
1019
+ // Set notification content
1020
+ notificationTitle.textContent = title;
1021
+ notificationMessage.textContent = message;
1022
+
1023
+ // Set notification type
1024
+ notification.className = 'notification';
1025
+ notification.classList.add(type);
1026
+
1027
+ // Set icon based on type
1028
+ switch(type) {
1029
+ case 'success':
1030
+ notificationIcon.className = 'fas fa-check-circle';
1031
+ break;
1032
+ case 'error':
1033
+ notificationIcon.className = 'fas fa-exclamation-circle';
1034
+ break;
1035
+ case 'warning':
1036
+ notificationIcon.className = 'fas fa-exclamation-triangle';
1037
+ break;
1038
+ default:
1039
+ notificationIcon.className = 'fas fa-info-circle';
1040
+ }
1041
+
1042
+ // Show notification
1043
+ notification.classList.add('show');
1044
+
1045
+ // Auto hide after 5 seconds
1046
+ setTimeout(hideNotification, 5000);
1047
+ }
1048
+
1049
+ function hideNotification() {
1050
+ const notification = document.getElementById('notification');
1051
+ notification.classList.remove('show');
1052
+ }
1053
+
1054
+ function validatePairsSelection() {
1055
+ const selectedPairs = document.querySelectorAll('input[name="selected_pairs"]:checked');
1056
+
1057
+ if (selectedPairs.length < 2 || selectedPairs.length > 8) {
1058
+ showNotification('خطأ', 'يجب اختيار من 2 إلى 8 أزواج عملات', 'error');
1059
+ return false;
1060
+ }
1061
+
1062
+ return true;
1063
+ }
1064
+
1065
+ function updateAnalysisInterval() {
1066
+ const password = document.getElementById('adminPassword').value;
1067
+ const interval = document.getElementById('analysisInterval').value;
1068
+
1069
+ if (!password || !interval) {
1070
+ showNotification('خطأ', 'يرجى إدخال كلمة المرور والفاصل الزمني', 'error');
1071
+ return;
1072
+ }
1073
+
1074
+ const formData = new FormData();
1075
+ formData.append('admin_password', password);
1076
+ formData.append('analysis_interval', interval);
1077
+
1078
+ fetch('/update-interval', {
1079
+ method: 'POST',
1080
+ body: formData
1081
+ })
1082
+ .then(response => response.json())
1083
+ .then(data => {
1084
+ if (data.success) {
1085
+ showNotification('تم التحديث', data.message, 'success');
1086
+ document.getElementById('adminPassword').value = '';
1087
+
1088
+ // Update displayed interval
1089
+ document.querySelector('.form-text').textContent = `الفاصل الزمني الحالي: ${data.new_interval} دقيقة`;
1090
+ } else {
1091
+ showNotification('خطأ', data.message, 'error');
1092
+ }
1093
+ })
1094
+ .catch(error => {
1095
+ showNotification('خطأ', 'حدث خطأ أثناء تحديث الفاصل الزمني', 'error');
1096
+ console.error('Error updating interval:', error);
1097
+ });
1098
+ }
1099
+
1100
+ // Enter key for password
1101
+ document.addEventListener('keypress', function(e) {
1102
+ if (e.key === 'Enter' && !isAuthenticated) {
1103
+ checkPassword();
1104
+ }
1105
+ });
1106
+
1107
+ // Initialize on page load
1108
+ document.addEventListener('DOMContentLoaded', function() {
1109
+ checkAuthStatus();
1110
+
1111
+ // Add form validation
1112
+ document.getElementById('settingsForm').addEventListener('submit', function(e) {
1113
+ if (!validatePairsSelection()) {
1114
+ e.preventDefault();
1115
+ } else {
1116
+ showNotification('جاري المعالجة', 'جاري حفظ الإعدادات...', 'info');
1117
+ }
1118
+ });
1119
+
1120
+ // Add event listener for update interval button
1121
+ document.getElementById('updateIntervalBtn').addEventListener('click', updateAnalysisInterval);
1122
+
1123
+ // Add event listeners for pair selection items to improve UX
1124
+ document.querySelectorAll('.pair-item').forEach(item => {
1125
+ item.addEventListener('click', function(e) {
1126
+ // If the click was directly on the checkbox, don't interfere
1127
+ if (e.target.type === 'checkbox') return;
1128
+
1129
+ // Otherwise toggle the checkbox
1130
+ const checkbox = this.querySelector('input[type="checkbox"]');
1131
+ checkbox.checked = !checkbox.checked;
1132
+
1133
+ // Visual feedback
1134
+ if (checkbox.checked) {
1135
+ this.classList.add('selected');
1136
+ } else {
1137
+ this.classList.remove('selected');
1138
+ }
1139
+ });
1140
+
1141
+ // Set initial selected state
1142
+ const checkbox = item.querySelector('input[type="checkbox"]');
1143
+ if (checkbox.checked) {
1144
+ item.classList.add('selected');
1145
+ }
1146
+ });
1147
+ });
1148
+ </script>
1149
+ </body>
1150
+ </html>