my0919175 commited on
Commit
369a698
·
verified ·
1 Parent(s): aa590d1

Upload 13 files

Browse files
static/create.html CHANGED
@@ -214,7 +214,10 @@ textarea{ resize:vertical; min-height:100px; }
214
  background: var(--bg); border-top:1px solid var(--line);
215
  padding: 6px 4px calc(6px + env(safe-area-inset-bottom));
216
  box-shadow: 0 -2px 14px rgba(10,10,10,0.05);
 
 
217
  }
 
218
  .bn-item{
219
  flex:1; display:flex; flex-direction:column; align-items:center; gap:3px;
220
  padding:6px 2px; border-radius:12px; color: var(--muted-soft);
@@ -434,7 +437,8 @@ function renderBottomNav(active){
434
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
435
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
436
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
437
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
438
  };
439
  let tabs = [
440
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -447,11 +451,30 @@ function renderBottomNav(active){
447
  } else {
448
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
449
  }
 
450
  const nav = document.createElement('div');
451
  nav.id = 'bottom-nav';
452
  nav.className = 'bottom-nav';
453
  nav.innerHTML = tabs.map(t => `<a class="bn-item ${t.key===active?'active':''}" href="${t.href}">${icons[t.key]}<span>${t.label}</span></a>`).join('');
454
  document.body.appendChild(nav);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
455
  }
456
 
457
  function renderFooter(){
@@ -460,7 +483,7 @@ function renderFooter(){
460
  el.id = 'global-footer-note';
461
  el.className = 'footer-note';
462
  el.style.cssText = 'margin-top:8px;';
463
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
464
  document.body.appendChild(el);
465
  }
466
 
 
214
  background: var(--bg); border-top:1px solid var(--line);
215
  padding: 6px 4px calc(6px + env(safe-area-inset-bottom));
216
  box-shadow: 0 -2px 14px rgba(10,10,10,0.05);
217
+ transform: translateY(0); transition: transform .28s cubic-bezier(.4,0,.2,1);
218
+ will-change: transform;
219
  }
220
+ .bottom-nav.bn-hidden{ transform: translateY(100%); }
221
  .bn-item{
222
  flex:1; display:flex; flex-direction:column; align-items:center; gap:3px;
223
  padding:6px 2px; border-radius:12px; color: var(--muted-soft);
 
437
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
438
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
439
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
440
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
441
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
442
  };
443
  let tabs = [
444
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
451
  } else {
452
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
453
  }
454
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
455
  const nav = document.createElement('div');
456
  nav.id = 'bottom-nav';
457
  nav.className = 'bottom-nav';
458
  nav.innerHTML = tabs.map(t => `<a class="bn-item ${t.key===active?'active':''}" href="${t.href}">${icons[t.key]}<span>${t.label}</span></a>`).join('');
459
  document.body.appendChild(nav);
460
+ initBottomNavAutoHide(nav);
461
+ }
462
+
463
+ function initBottomNavAutoHide(nav){
464
+ let lastY = window.scrollY, ticking = false;
465
+ window.addEventListener('scroll', () => {
466
+ if(ticking) return;
467
+ ticking = true;
468
+ requestAnimationFrame(() => {
469
+ const y = window.scrollY;
470
+ const delta = y - lastY;
471
+ if(y < 40){ nav.classList.remove('bn-hidden'); }
472
+ else if(delta > 6){ nav.classList.add('bn-hidden'); }
473
+ else if(delta < -6){ nav.classList.remove('bn-hidden'); }
474
+ lastY = y;
475
+ ticking = false;
476
+ });
477
+ }, { passive:true });
478
  }
479
 
480
  function renderFooter(){
 
483
  el.id = 'global-footer-note';
484
  el.className = 'footer-note';
485
  el.style.cssText = 'margin-top:8px;';
486
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
487
  document.body.appendChild(el);
488
  }
489
 
static/dashboard.html CHANGED
@@ -378,7 +378,8 @@ function renderBottomNav(active){
378
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
379
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
380
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
381
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
382
  };
383
  let tabs = [
384
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -391,6 +392,7 @@ function renderBottomNav(active){
391
  } else {
392
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
393
  }
 
394
  const nav = document.createElement('div');
395
  nav.id = 'bottom-nav';
396
  nav.className = 'bottom-nav';
@@ -423,7 +425,7 @@ function renderFooter(){
423
  el.id = 'global-footer-note';
424
  el.className = 'footer-note';
425
  el.style.cssText = 'margin-top:8px;';
426
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
427
  document.body.appendChild(el);
428
  }
429
 
 
378
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
379
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
380
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
381
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
382
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
383
  };
384
  let tabs = [
385
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
392
  } else {
393
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
394
  }
395
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
396
  const nav = document.createElement('div');
397
  nav.id = 'bottom-nav';
398
  nav.className = 'bottom-nav';
 
425
  el.id = 'global-footer-note';
426
  el.className = 'footer-note';
427
  el.style.cssText = 'margin-top:8px;';
428
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
429
  document.body.appendChild(el);
430
  }
431
 
static/forgot-password.html CHANGED
@@ -378,7 +378,8 @@ function renderBottomNav(active){
378
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
379
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
380
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
381
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
382
  };
383
  let tabs = [
384
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -391,6 +392,7 @@ function renderBottomNav(active){
391
  } else {
392
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
393
  }
 
394
  const nav = document.createElement('div');
395
  nav.id = 'bottom-nav';
396
  nav.className = 'bottom-nav';
@@ -423,7 +425,7 @@ function renderFooter(){
423
  el.id = 'global-footer-note';
424
  el.className = 'footer-note';
425
  el.style.cssText = 'margin-top:8px;';
426
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
427
  document.body.appendChild(el);
428
  }
429
 
 
378
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
379
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
380
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
381
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
382
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
383
  };
384
  let tabs = [
385
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
392
  } else {
393
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
394
  }
395
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
396
  const nav = document.createElement('div');
397
  nav.id = 'bottom-nav';
398
  nav.className = 'bottom-nav';
 
425
  el.id = 'global-footer-note';
426
  el.className = 'footer-note';
427
  el.style.cssText = 'margin-top:8px;';
428
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
429
  document.body.appendChild(el);
430
  }
431
 
static/index.html CHANGED
@@ -410,7 +410,8 @@ function renderBottomNav(active){
410
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
411
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
412
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
413
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
414
  };
415
  let tabs = [
416
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -423,6 +424,7 @@ function renderBottomNav(active){
423
  } else {
424
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
425
  }
 
426
  const nav = document.createElement('div');
427
  nav.id = 'bottom-nav';
428
  nav.className = 'bottom-nav';
@@ -455,7 +457,7 @@ function renderFooter(){
455
  el.id = 'global-footer-note';
456
  el.className = 'footer-note';
457
  el.style.cssText = 'margin-top:8px;';
458
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
459
  document.body.appendChild(el);
460
  }
461
 
 
410
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
411
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
412
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
413
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
414
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
415
  };
416
  let tabs = [
417
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
424
  } else {
425
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
426
  }
427
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
428
  const nav = document.createElement('div');
429
  nav.id = 'bottom-nav';
430
  nav.className = 'bottom-nav';
 
457
  el.id = 'global-footer-note';
458
  el.className = 'footer-note';
459
  el.style.cssText = 'margin-top:8px;';
460
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
461
  document.body.appendChild(el);
462
  }
463
 
static/login.html CHANGED
@@ -383,7 +383,8 @@ function renderBottomNav(active){
383
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
384
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
385
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
386
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
387
  };
388
  let tabs = [
389
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -396,6 +397,7 @@ function renderBottomNav(active){
396
  } else {
397
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
398
  }
 
399
  const nav = document.createElement('div');
400
  nav.id = 'bottom-nav';
401
  nav.className = 'bottom-nav';
@@ -428,7 +430,7 @@ function renderFooter(){
428
  el.id = 'global-footer-note';
429
  el.className = 'footer-note';
430
  el.style.cssText = 'margin-top:8px;';
431
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
432
  document.body.appendChild(el);
433
  }
434
 
 
383
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
384
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
385
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
386
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
387
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
388
  };
389
  let tabs = [
390
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
397
  } else {
398
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
399
  }
400
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
401
  const nav = document.createElement('div');
402
  nav.id = 'bottom-nav';
403
  nav.className = 'bottom-nav';
 
430
  el.id = 'global-footer-note';
431
  el.className = 'footer-note';
432
  el.style.cssText = 'margin-top:8px;';
433
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
434
  document.body.appendChild(el);
435
  }
436
 
static/messages.html CHANGED
@@ -382,7 +382,8 @@ function renderBottomNav(active){
382
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
383
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
384
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
385
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
386
  };
387
  let tabs = [
388
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -395,6 +396,7 @@ function renderBottomNav(active){
395
  } else {
396
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
397
  }
 
398
  const nav = document.createElement('div');
399
  nav.id = 'bottom-nav';
400
  nav.className = 'bottom-nav';
@@ -427,7 +429,7 @@ function renderFooter(){
427
  el.id = 'global-footer-note';
428
  el.className = 'footer-note';
429
  el.style.cssText = 'margin-top:8px;';
430
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
431
  document.body.appendChild(el);
432
  }
433
 
 
382
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
383
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
384
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
385
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
386
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
387
  };
388
  let tabs = [
389
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
396
  } else {
397
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
398
  }
399
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
400
  const nav = document.createElement('div');
401
  nav.id = 'bottom-nav';
402
  nav.className = 'bottom-nav';
 
429
  el.id = 'global-footer-note';
430
  el.className = 'footer-note';
431
  el.style.cssText = 'margin-top:8px;';
432
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
433
  document.body.appendChild(el);
434
  }
435
 
static/profile.html CHANGED
@@ -424,7 +424,8 @@ function renderBottomNav(active){
424
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
425
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
426
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
427
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
428
  };
429
  let tabs = [
430
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -437,6 +438,7 @@ function renderBottomNav(active){
437
  } else {
438
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
439
  }
 
440
  const nav = document.createElement('div');
441
  nav.id = 'bottom-nav';
442
  nav.className = 'bottom-nav';
@@ -469,7 +471,7 @@ function renderFooter(){
469
  el.id = 'global-footer-note';
470
  el.className = 'footer-note';
471
  el.style.cssText = 'margin-top:8px;';
472
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
473
  document.body.appendChild(el);
474
  }
475
 
@@ -543,7 +545,7 @@ async function load(){
543
  function renderHeader(p){
544
  const me = API.user();
545
  const isMe = me && me.id === p.id;
546
- const roleLabel = p.role === 'owner' ? 'صاحب مشاريع' : p.role === 'investor' ? 'مستثمر' : 'صاحب مشاريع ومستثمر';
547
  const stars = p.ratingAvg ? `⭐ ${p.ratingAvg} (${p.ratingCount} تقييم)` : 'لسه من غير تقييمات';
548
  document.getElementById('profile-header').innerHTML = `
549
  <div style="display:flex; align-items:center; gap:16px; flex-wrap:wrap;">
 
424
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
425
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
426
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
427
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
428
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
429
  };
430
  let tabs = [
431
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
438
  } else {
439
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
440
  }
441
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
442
  const nav = document.createElement('div');
443
  nav.id = 'bottom-nav';
444
  nav.className = 'bottom-nav';
 
471
  el.id = 'global-footer-note';
472
  el.className = 'footer-note';
473
  el.style.cssText = 'margin-top:8px;';
474
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
475
  document.body.appendChild(el);
476
  }
477
 
 
545
  function renderHeader(p){
546
  const me = API.user();
547
  const isMe = me && me.id === p.id;
548
+ const roleLabel = p.role === 'owner' ? 'صاحب مشاريع' : p.role === 'investor' ? 'مستثمر' : p.role === 'broker' ? 'عارض (وسيط)' : 'صاحب مشاريع ومستثمر';
549
  const stars = p.ratingAvg ? `⭐ ${p.ratingAvg} (${p.ratingCount} تقييم)` : 'لسه من غير تقييمات';
550
  document.getElementById('profile-header').innerHTML = `
551
  <div style="display:flex; align-items:center; gap:16px; flex-wrap:wrap;">
static/project.html CHANGED
@@ -447,7 +447,8 @@ function renderBottomNav(active){
447
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
448
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
449
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
450
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
451
  };
452
  let tabs = [
453
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -460,6 +461,7 @@ function renderBottomNav(active){
460
  } else {
461
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
462
  }
 
463
  const nav = document.createElement('div');
464
  nav.id = 'bottom-nav';
465
  nav.className = 'bottom-nav';
@@ -492,7 +494,7 @@ function renderFooter(){
492
  el.id = 'global-footer-note';
493
  el.className = 'footer-note';
494
  el.style.cssText = 'margin-top:8px;';
495
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
496
  document.body.appendChild(el);
497
  }
498
 
 
447
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
448
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
449
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
450
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
451
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
452
  };
453
  let tabs = [
454
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
461
  } else {
462
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
463
  }
464
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
465
  const nav = document.createElement('div');
466
  nav.id = 'bottom-nav';
467
  nav.className = 'bottom-nav';
 
494
  el.id = 'global-footer-note';
495
  el.className = 'footer-note';
496
  el.style.cssText = 'margin-top:8px;';
497
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
498
  document.body.appendChild(el);
499
  }
500
 
static/reset-password.html CHANGED
@@ -378,7 +378,8 @@ function renderBottomNav(active){
378
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
379
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
380
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
381
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
382
  };
383
  let tabs = [
384
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -391,6 +392,7 @@ function renderBottomNav(active){
391
  } else {
392
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
393
  }
 
394
  const nav = document.createElement('div');
395
  nav.id = 'bottom-nav';
396
  nav.className = 'bottom-nav';
@@ -423,7 +425,7 @@ function renderFooter(){
423
  el.id = 'global-footer-note';
424
  el.className = 'footer-note';
425
  el.style.cssText = 'margin-top:8px;';
426
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
427
  document.body.appendChild(el);
428
  }
429
 
 
378
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
379
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
380
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
381
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
382
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
383
  };
384
  let tabs = [
385
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
392
  } else {
393
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
394
  }
395
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
396
  const nav = document.createElement('div');
397
  nav.id = 'bottom-nav';
398
  nav.className = 'bottom-nav';
 
425
  el.id = 'global-footer-note';
426
  el.className = 'footer-note';
427
  el.style.cssText = 'margin-top:8px;';
428
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
429
  document.body.appendChild(el);
430
  }
431
 
static/signup.html CHANGED
@@ -225,7 +225,10 @@ textarea{ resize:vertical; min-height:100px; }
225
  background: var(--bg); border-top:1px solid var(--line);
226
  padding: 6px 4px calc(6px + env(safe-area-inset-bottom));
227
  box-shadow: 0 -2px 14px rgba(10,10,10,0.05);
 
 
228
  }
 
229
  .bn-item{
230
  flex:1; display:flex; flex-direction:column; align-items:center; gap:3px;
231
  padding:6px 2px; border-radius:12px; color: var(--muted-soft);
@@ -300,6 +303,11 @@ img,video{ max-width:100%; height:auto; }
300
  <div class="role-title">الاتنين</div>
301
  <div class="role-desc">أعرض مشروعي وكمان أستكشف فرص تانية</div>
302
  </div>
 
 
 
 
 
303
  </div>
304
  </div>
305
 
@@ -444,7 +452,8 @@ function renderBottomNav(active){
444
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
445
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
446
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
447
- login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>'
 
448
  };
449
  let tabs = [
450
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
@@ -457,11 +466,30 @@ function renderBottomNav(active){
457
  } else {
458
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
459
  }
 
460
  const nav = document.createElement('div');
461
  nav.id = 'bottom-nav';
462
  nav.className = 'bottom-nav';
463
  nav.innerHTML = tabs.map(t => `<a class="bn-item ${t.key===active?'active':''}" href="${t.href}">${icons[t.key]}<span>${t.label}</span></a>`).join('');
464
  document.body.appendChild(nav);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
465
  }
466
 
467
  function renderFooter(){
@@ -470,7 +498,7 @@ function renderFooter(){
470
  el.id = 'global-footer-note';
471
  el.className = 'footer-note';
472
  el.style.cssText = 'margin-top:8px;';
473
- el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a>';
474
  document.body.appendChild(el);
475
  }
476
 
@@ -523,7 +551,7 @@ let selectedRole = 'both';
523
 
524
  function updateRoleUI(){
525
  document.querySelectorAll('.role-card').forEach(c => c.classList.toggle('active', c.dataset.role === selectedRole));
526
- document.getElementById('owner-fields').style.display = (selectedRole === 'owner' || selectedRole === 'both') ? 'block' : 'none';
527
  document.getElementById('investor-fields').style.display = (selectedRole === 'investor' || selectedRole === 'both') ? 'block' : 'none';
528
  }
529
  document.querySelectorAll('.role-card').forEach(card => {
 
225
  background: var(--bg); border-top:1px solid var(--line);
226
  padding: 6px 4px calc(6px + env(safe-area-inset-bottom));
227
  box-shadow: 0 -2px 14px rgba(10,10,10,0.05);
228
+ transform: translateY(0); transition: transform .28s cubic-bezier(.4,0,.2,1);
229
+ will-change: transform;
230
  }
231
+ .bottom-nav.bn-hidden{ transform: translateY(100%); }
232
  .bn-item{
233
  flex:1; display:flex; flex-direction:column; align-items:center; gap:3px;
234
  padding:6px 2px; border-radius:12px; color: var(--muted-soft);
 
303
  <div class="role-title">الاتنين</div>
304
  <div class="role-desc">أعرض مشروعي وكمان أستكشف فرص تانية</div>
305
  </div>
306
+ <div class="role-card" data-role="broker">
307
+ <div class="role-icon">🤝</div>
308
+ <div class="role-title">عارض (وسيط)</div>
309
+ <div class="role-desc">هعرض مشاريع لأصحابها بالنيابة عنهم</div>
310
+ </div>
311
  </div>
312
  </div>
313
 
 
452
  dashboard: '<svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="9" rx="1.5"/><rect x="14" y="3" width="7" height="5" rx="1.5"/><rect x="14" y="12" width="7" height="9" rx="1.5"/><rect x="3" y="16" width="7" height="5" rx="1.5"/></svg>',
453
  messages: '<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H8l-5 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg>',
454
  profile: '<svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8"/></svg>',
455
+ login: '<svg viewBox="0 0 24 24"><path d="M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"/></svg>',
456
+ about: '<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 8v5M12 16h.01"/></svg>'
457
  };
458
  let tabs = [
459
  { key:'browse', href:'index.html', label:'\u0627\u0633\u062a\u0643\u0634\u0641' },
 
466
  } else {
467
  tabs.push({ key:'login', href:'login.html', label:'\u062f\u062e\u0648\u0644' });
468
  }
469
+ tabs.push({ key:'about', href:'about.html', label:'\u062a\u0648\u0627\u0635\u0644' });
470
  const nav = document.createElement('div');
471
  nav.id = 'bottom-nav';
472
  nav.className = 'bottom-nav';
473
  nav.innerHTML = tabs.map(t => `<a class="bn-item ${t.key===active?'active':''}" href="${t.href}">${icons[t.key]}<span>${t.label}</span></a>`).join('');
474
  document.body.appendChild(nav);
475
+ initBottomNavAutoHide(nav);
476
+ }
477
+
478
+ function initBottomNavAutoHide(nav){
479
+ let lastY = window.scrollY, ticking = false;
480
+ window.addEventListener('scroll', () => {
481
+ if(ticking) return;
482
+ ticking = true;
483
+ requestAnimationFrame(() => {
484
+ const y = window.scrollY;
485
+ const delta = y - lastY;
486
+ if(y < 40){ nav.classList.remove('bn-hidden'); }
487
+ else if(delta > 6){ nav.classList.add('bn-hidden'); }
488
+ else if(delta < -6){ nav.classList.remove('bn-hidden'); }
489
+ lastY = y;
490
+ ticking = false;
491
+ });
492
+ }, { passive:true });
493
  }
494
 
495
  function renderFooter(){
 
498
  el.id = 'global-footer-note';
499
  el.className = 'footer-note';
500
  el.style.cssText = 'margin-top:8px;';
501
+ el.innerHTML = '\u0646\u064a\u0651\u0629 \u0648\u0633\u064a\u0637 \u062a\u0648\u0627\u0635\u0644 \u0641\u0642\u0637 \u00b7 <a href="terms.html" style="text-decoration:underline;">\u0627\u0644\u0634\u0631\u0648\u0637 \u0648\u0627\u0644\u0623\u062d\u0643\u0627\u0645</a> \u00b7 <a href="about.html" style="text-decoration:underline;">\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0627\u0646\u0627</a>';
502
  document.body.appendChild(el);
503
  }
504
 
 
551
 
552
  function updateRoleUI(){
553
  document.querySelectorAll('.role-card').forEach(c => c.classList.toggle('active', c.dataset.role === selectedRole));
554
+ document.getElementById('owner-fields').style.display = (selectedRole === 'owner' || selectedRole === 'both' || selectedRole === 'broker') ? 'block' : 'none';
555
  document.getElementById('investor-fields').style.display = (selectedRole === 'investor' || selectedRole === 'both') ? 'block' : 'none';
556
  }
557
  document.querySelectorAll('.role-card').forEach(card => {