youssefreda9 commited on
Commit
897c90d
·
1 Parent(s): e58b76f

Fix HF_HOME caching in Dockerfile and update UI

Browse files
.gitattributes CHANGED
@@ -1,4 +1,4 @@
1
  *.db filter=lfs diff=lfs merge=lfs -text
2
  quran_master.db filter=lfs diff=lfs merge=lfs -text
3
- extension/assets/icons/fab_logo.png filter=lfs diff=lfs merge=lfs -text
4
  *.png filter=lfs diff=lfs merge=lfs -text
 
 
1
  *.db filter=lfs diff=lfs merge=lfs -text
2
  quran_master.db filter=lfs diff=lfs merge=lfs -text
 
3
  *.png filter=lfs diff=lfs merge=lfs -text
4
+ extension/assets/icons/fab_logo.png filter=lfs diff=lfs merge=lfs -text
.gitignore CHANGED
Binary files a/.gitignore and b/.gitignore differ
 
Dockerfile CHANGED
@@ -16,6 +16,9 @@ RUN pip install --no-cache-dir torch --index-url https://download.pytorch.org/wh
16
  # Pre-download models during build (network is available here)
17
  # At runtime, the container has NO outbound DNS, so models must be cached
18
 
 
 
 
19
  # 1. Summarization model (MBart, float16)
20
  RUN python -c "\
21
  from transformers import MBartForConditionalGeneration, AutoTokenizer, AutoConfig; \
@@ -46,7 +49,9 @@ print('Spelling model + MLM cached!'); \
46
  "
47
 
48
  # 3. Grammar — camel-tools MLE disambiguator data
49
- RUN camel_data -i light
 
 
50
 
51
  # 4. Punctuation model (PuncAra-v1 — EncoderDecoderModel)
52
  RUN python -c "\
 
16
  # Pre-download models during build (network is available here)
17
  # At runtime, the container has NO outbound DNS, so models must be cached
18
 
19
+ # Set HF_HOME to a global path so non-root users (like in HF Spaces) can access cached models
20
+ ENV HF_HOME=/opt/huggingface
21
+ RUN mkdir -p /opt/huggingface && chmod 777 /opt/huggingface
22
  # 1. Summarization model (MBart, float16)
23
  RUN python -c "\
24
  from transformers import MBartForConditionalGeneration, AutoTokenizer, AutoConfig; \
 
49
  "
50
 
51
  # 3. Grammar — camel-tools MLE disambiguator data
52
+ # Set CAMELTOOLS_DATA to a global path so non-root users (like in HF Spaces) can access it
53
+ ENV CAMELTOOLS_DATA=/opt/camel_tools
54
+ RUN mkdir -p /opt/camel_tools && chmod 777 /opt/camel_tools && camel_data -i light
55
 
56
  # 4. Punctuation model (PuncAra-v1 — EncoderDecoderModel)
57
  RUN python -c "\
extension/_locales/ar/messages.json CHANGED
@@ -16,7 +16,7 @@
16
  "description": "Context menu item for summarizing selected text"
17
  },
18
  "contextMenuDialect": {
19
- "message": "تحويل اللهجة إلى العربية الفصحى مع بيان",
20
  "description": "Context menu: dialect→MSA"
21
  },
22
  "contextMenuQuran": {
 
16
  "description": "Context menu item for summarizing selected text"
17
  },
18
  "contextMenuDialect": {
19
+ "message": "تحويل للفصحى مع بيان",
20
  "description": "Context menu: dialect→MSA"
21
  },
22
  "contextMenuQuran": {
extension/_locales/en/messages.json CHANGED
@@ -8,19 +8,19 @@
8
  "description": "Extension description shown in Chrome Web Store"
9
  },
10
  "contextMenuCorrect": {
11
- "message": "Correct with Bayan",
12
  "description": "Context menu item for correcting selected text"
13
  },
14
  "contextMenuSummarize": {
15
- "message": "Summarize with Bayan",
16
  "description": "Context menu item for summarizing selected text"
17
  },
18
  "contextMenuDialect": {
19
- "message": "Convert dialect to MSA with Bayan",
20
  "description": "Context menu: dialect→MSA"
21
  },
22
  "contextMenuQuran": {
23
- "message": "Verify verse with Bayan",
24
  "description": "Context menu: Quran verify"
25
  }
26
  }
 
8
  "description": "Extension description shown in Chrome Web Store"
9
  },
10
  "contextMenuCorrect": {
11
+ "message": "تصحيح النص مع بيان",
12
  "description": "Context menu item for correcting selected text"
13
  },
14
  "contextMenuSummarize": {
15
+ "message": "تلخيص النص مع بيان",
16
  "description": "Context menu item for summarizing selected text"
17
  },
18
  "contextMenuDialect": {
19
+ "message": "تحويل للفصحى مع بيان",
20
  "description": "Context menu: dialect→MSA"
21
  },
22
  "contextMenuQuran": {
23
+ "message": "تدقيق النص القرآني مع بيان",
24
  "description": "Context menu: Quran verify"
25
  }
26
  }
extension/background.js CHANGED
@@ -49,25 +49,27 @@ function getStorage() {
49
  // ══════════════════════════════════════════════════════════
50
 
51
  chrome.runtime.onInstalled.addListener(() => {
52
- chrome.contextMenus.create({
53
- id: 'bayan-correct',
54
- title: chrome.i18n.getMessage('contextMenuCorrect') || 'تصحيح النص مع بيان',
55
- contexts: ['selection'],
56
- });
57
- chrome.contextMenus.create({
58
- id: 'bayan-summarize',
59
- title: chrome.i18n.getMessage('contextMenuSummarize') || 'تلخيص النص مع بيان',
60
- contexts: ['selection'],
61
- });
62
- chrome.contextMenus.create({
63
- id: 'bayan-dialect',
64
- title: chrome.i18n.getMessage('contextMenuDialect') || 'تحويل اللهجة إلى العربية الفصحى مع بيان',
65
- contexts: ['selection'],
66
- });
67
- chrome.contextMenus.create({
68
- id: 'bayan-quran',
69
- title: chrome.i18n.getMessage('contextMenuQuran') || 'تدقيق النص القرآني مع بيان',
70
- contexts: ['selection'],
 
 
71
  });
72
  });
73
 
 
49
  // ══════════════════════════════════════════════════════════
50
 
51
  chrome.runtime.onInstalled.addListener(() => {
52
+ chrome.contextMenus.removeAll(() => {
53
+ chrome.contextMenus.create({
54
+ id: 'bayan-correct',
55
+ title: 'تصحيح النص مع بيان',
56
+ contexts: ['selection'],
57
+ });
58
+ chrome.contextMenus.create({
59
+ id: 'bayan-summarize',
60
+ title: 'تلخيص النص مع بيان',
61
+ contexts: ['selection'],
62
+ });
63
+ chrome.contextMenus.create({
64
+ id: 'bayan-dialect',
65
+ title: 'تحويل للفصحى مع بيان',
66
+ contexts: ['selection'],
67
+ });
68
+ chrome.contextMenus.create({
69
+ id: 'bayan-quran',
70
+ title: 'تدقيق النص القرآني مع بيان',
71
+ contexts: ['selection'],
72
+ });
73
  });
74
  });
75
 
extension/content-inline.js CHANGED
@@ -244,8 +244,10 @@
244
  + `left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`
245
  + `font-family:${cs.fontFamily};font-size:${cs.fontSize};line-height:${cs.lineHeight};`
246
  + `padding:${cs.padding};border:${cs.border};border-color:transparent;`
247
- + `direction:${cs.direction};text-align:${cs.textAlign};overflow:hidden;`
248
- + `pointer-events:none;z-index:2147483645;box-sizing:border-box;`
 
 
249
  + `white-space:pre-wrap;word-wrap:break-word;color:transparent;`;
250
 
251
  const html = esc(baseText) + `<span class="bayan-il-ghost-suffix">${esc(suffix)}</span>`;
@@ -341,8 +343,10 @@
341
  + `left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`
342
  + `font-family:${cs.fontFamily};font-size:${cs.fontSize};line-height:${cs.lineHeight};`
343
  + `padding:${cs.padding};border:${cs.border};border-color:transparent;`
344
- + `direction:${cs.direction};text-align:${cs.textAlign};overflow:hidden;`
345
- + `pointer-events:none;z-index:2147483645;box-sizing:border-box;`
 
 
346
  + `white-space:pre-wrap;word-wrap:break-word;color:transparent;`;
347
 
348
  const sorted = [...suggs].sort((a, b) => a.start - b.start);
 
244
  + `left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`
245
  + `font-family:${cs.fontFamily};font-size:${cs.fontSize};line-height:${cs.lineHeight};`
246
  + `padding:${cs.padding};border:${cs.border};border-color:transparent;`
247
+ + `direction:${cs.direction};text-align:${cs.textAlign};`
248
+ + `unicode-bidi:${cs.unicodeBidi};letter-spacing:${cs.letterSpacing};`
249
+ + `word-spacing:${cs.wordSpacing};text-indent:${cs.textIndent};`
250
+ + `overflow:hidden;pointer-events:none;z-index:2147483645;box-sizing:border-box;`
251
  + `white-space:pre-wrap;word-wrap:break-word;color:transparent;`;
252
 
253
  const html = esc(baseText) + `<span class="bayan-il-ghost-suffix">${esc(suffix)}</span>`;
 
343
  + `left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`
344
  + `font-family:${cs.fontFamily};font-size:${cs.fontSize};line-height:${cs.lineHeight};`
345
  + `padding:${cs.padding};border:${cs.border};border-color:transparent;`
346
+ + `direction:${cs.direction};text-align:${cs.textAlign};`
347
+ + `unicode-bidi:${cs.unicodeBidi};letter-spacing:${cs.letterSpacing};`
348
+ + `word-spacing:${cs.wordSpacing};text-indent:${cs.textIndent};`
349
+ + `overflow:hidden;pointer-events:none;z-index:2147483645;box-sizing:border-box;`
350
  + `white-space:pre-wrap;word-wrap:break-word;color:transparent;`;
351
 
352
  const sorted = [...suggs].sort((a, b) => a.start - b.start);
extension/popup.css CHANGED
@@ -27,7 +27,7 @@
27
 
28
  --bayan-spelling: #ef4444;
29
  --bayan-grammar: #f59e0b;
30
- --bayan-punctuation: #3b82f6;
31
 
32
  --bayan-radius: 10px;
33
  --bayan-radius-sm: 6px;
@@ -473,7 +473,7 @@ body::-webkit-scrollbar-thumb {
473
  }
474
 
475
  .bayan-punctuation-suggestion {
476
- background: rgba(59, 130, 246, 0.15);
477
  border-bottom: 2px solid var(--bayan-punctuation);
478
  border-radius: 2px;
479
  padding: 0 2px;
@@ -481,7 +481,7 @@ body::-webkit-scrollbar-thumb {
481
  transition: background var(--bayan-transition);
482
  }
483
  .bayan-punctuation-suggestion:hover {
484
- background: rgba(59, 130, 246, 0.25);
485
  }
486
 
487
  /* ══════════════════════════════════════════════
@@ -556,7 +556,7 @@ body::-webkit-scrollbar-thumb {
556
  color: var(--bayan-grammar);
557
  }
558
  .bayan-badge-punctuation {
559
- background: rgba(59, 130, 246, 0.15);
560
  color: var(--bayan-punctuation);
561
  }
562
 
 
27
 
28
  --bayan-spelling: #ef4444;
29
  --bayan-grammar: #f59e0b;
30
+ --bayan-punctuation: #6BC98A;
31
 
32
  --bayan-radius: 10px;
33
  --bayan-radius-sm: 6px;
 
473
  }
474
 
475
  .bayan-punctuation-suggestion {
476
+ background: rgba(107, 201, 138, 0.14);
477
  border-bottom: 2px solid var(--bayan-punctuation);
478
  border-radius: 2px;
479
  padding: 0 2px;
 
481
  transition: background var(--bayan-transition);
482
  }
483
  .bayan-punctuation-suggestion:hover {
484
+ background: rgba(107, 201, 138, 0.28);
485
  }
486
 
487
  /* ══════════════════════════════════════════════
 
556
  color: var(--bayan-grammar);
557
  }
558
  .bayan-badge-punctuation {
559
+ background: rgba(107, 201, 138, 0.15);
560
  color: var(--bayan-punctuation);
561
  }
562
 
extension/popup.html CHANGED
@@ -35,7 +35,7 @@
35
  </button>
36
  <button class="bayan-tab" role="tab" aria-selected="false" data-tab="dialect" id="tab-dialect">
37
  <svg width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129"/></svg>
38
- لهجة
39
  </button>
40
  <button class="bayan-tab" role="tab" aria-selected="false" data-tab="quran" id="tab-quran">
41
  <svg width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/></svg>
@@ -195,7 +195,7 @@
195
  <div class="bayan-actions">
196
  <button class="bayan-btn bayan-btn-primary" id="btn-dialect" type="button">
197
  <svg width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"/></svg>
198
- تحويل إلى الفصحى
199
  </button>
200
  </div>
201
  <div class="bayan-result is-hidden" id="dialect-result-section">
 
35
  </button>
36
  <button class="bayan-tab" role="tab" aria-selected="false" data-tab="dialect" id="tab-dialect">
37
  <svg width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129"/></svg>
38
+ تحويل للفصحى
39
  </button>
40
  <button class="bayan-tab" role="tab" aria-selected="false" data-tab="quran" id="tab-quran">
41
  <svg width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/></svg>
 
195
  <div class="bayan-actions">
196
  <button class="bayan-btn bayan-btn-primary" id="btn-dialect" type="button">
197
  <svg width="16" height="16" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"/></svg>
198
+ تحويل للفصحى
199
  </button>
200
  </div>
201
  <div class="bayan-result is-hidden" id="dialect-result-section">
extension/sidepanel/sidepanel.css CHANGED
@@ -27,7 +27,7 @@
27
 
28
  --sp-spelling: #ef4444;
29
  --sp-grammar: #f59e0b;
30
- --sp-punctuation: #3b82f6;
31
 
32
  --sp-radius: 10px;
33
  --sp-radius-sm: 6px;
@@ -439,7 +439,7 @@ body {
439
  cursor: pointer;
440
  }
441
  .bayan-punctuation-suggestion {
442
- background: rgba(59, 130, 246, 0.15);
443
  border-bottom: 2px solid var(--sp-punctuation);
444
  padding: 0 2px;
445
  border-radius: 2px;
@@ -504,7 +504,7 @@ body {
504
  }
505
  .bayan-badge-spelling { background: rgba(239, 68, 68, 0.15); color: var(--sp-spelling); }
506
  .bayan-badge-grammar { background: rgba(245, 158, 11, 0.15); color: var(--sp-grammar); }
507
- .bayan-badge-punctuation { background: rgba(59, 130, 246, 0.15); color: var(--sp-punctuation); }
508
 
509
  .bayan-suggestion-change {
510
  display: flex;
 
27
 
28
  --sp-spelling: #ef4444;
29
  --sp-grammar: #f59e0b;
30
+ --sp-punctuation: #6BC98A;
31
 
32
  --sp-radius: 10px;
33
  --sp-radius-sm: 6px;
 
439
  cursor: pointer;
440
  }
441
  .bayan-punctuation-suggestion {
442
+ background: rgba(107, 201, 138, 0.14);
443
  border-bottom: 2px solid var(--sp-punctuation);
444
  padding: 0 2px;
445
  border-radius: 2px;
 
504
  }
505
  .bayan-badge-spelling { background: rgba(239, 68, 68, 0.15); color: var(--sp-spelling); }
506
  .bayan-badge-grammar { background: rgba(245, 158, 11, 0.15); color: var(--sp-grammar); }
507
+ .bayan-badge-punctuation { background: rgba(107, 201, 138, 0.15); color: var(--sp-punctuation); }
508
 
509
  .bayan-suggestion-change {
510
  display: flex;
extension/sidepanel/sidepanel.html CHANGED
@@ -35,7 +35,7 @@
35
  </button>
36
  <button class="sp-tab" role="tab" aria-selected="false" data-tab="dialect" id="tab-dialect">
37
  <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129"/></svg>
38
- لهجة
39
  </button>
40
  <button class="sp-tab" role="tab" aria-selected="false" data-tab="quran" id="tab-quran">
41
  <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/></svg>
@@ -193,7 +193,7 @@
193
  <div class="sp-actions">
194
  <button class="sp-btn sp-btn-primary" id="btn-dialect">
195
  <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"/></svg>
196
- تحويل إلى الفصحى
197
  </button>
198
  </div>
199
  <div class="sp-result is-hidden" id="dialect-result-section">
 
35
  </button>
36
  <button class="sp-tab" role="tab" aria-selected="false" data-tab="dialect" id="tab-dialect">
37
  <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129"/></svg>
38
+ تحويل للفصحى
39
  </button>
40
  <button class="sp-tab" role="tab" aria-selected="false" data-tab="quran" id="tab-quran">
41
  <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/></svg>
 
193
  <div class="sp-actions">
194
  <button class="sp-btn sp-btn-primary" id="btn-dialect">
195
  <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"/></svg>
196
+ تحويل للفصحى
197
  </button>
198
  </div>
199
  <div class="sp-result is-hidden" id="dialect-result-section">
generate_icons.py ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ """Generate extension icons from LOGOS/1.png (gradient bg for best small-size visibility)."""
2
+ from PIL import Image
3
+
4
+ img = Image.open("LOGOS/1.png")
5
+ for size in [16, 32, 48, 128]:
6
+ img.resize((size, size), Image.LANCZOS).save(f"extension/assets/icons/icon{size}.png")
7
+ print(f"Generated icon{size}.png ({size}x{size}) from LOGOS/1.png")
8
+ print("Done!")
src/index.html CHANGED
@@ -7,12 +7,12 @@
7
  <meta name="supabase-anon-key" content="">
8
  <title>بيان - مساعد الكتابة العربية الذكي</title>
9
  <meta name="description" content="بيان — منصة ذكاء اصطناعي متكاملة لتصحيح الإملاء والنحو والترقيم وتلخيص النصوص والإكمال التلقائي وتدقيق القرآن الكريم وتحويل اللهجات — مصمّمة خصيصًا للغة العربية. جرّبه مجاناً!">
10
- <meta property="og:image" content="/LOGOS/3.png">
11
  <meta property="og:title" content="بيان — مساعدك الذكي للكتابة بالعربية">
12
  <meta property="og:description" content="تدقيق إملائي ونحوي وترقيم، تلخيص ذكي، إكمال تلقائي، تدقيق القرآن الكريم، وتحويل اللهجات">
13
  <meta name="twitter:card" content="summary_large_image">
14
- <meta name="twitter:image" content="/LOGOS/3.png">
15
- <link rel="icon" type="image/png" href="/LOGOS/1.png">
16
  <script src="https://cdn.tailwindcss.com"></script>
17
  <link rel="preconnect" href="https://fonts.googleapis.com">
18
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
@@ -64,7 +64,7 @@
64
  <button id="mobile-menu-btn" class="mobile-menu-btn md:hidden" aria-label="فتح القائمة" aria-expanded="false" aria-controls="mobile-drawer">
65
  <svg width="22" height="22" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/></svg>
66
  </button>
67
- <button onclick="showPage('home')" class="flex items-center gap-3" style="background:none;border:none;cursor:pointer;" aria-label="الرئيسية"><img src="/LOGOS/2.png" alt="بيان" width="28" height="28" style="flex-shrink:0;"><span id="nav-brand" class="text-xl md:text-2xl font-bold text-gradient">بيان</span></button>
68
  </div>
69
  <div class="hidden md:flex items-center gap-8">
70
  <button onclick="showPage('home')" class="nav-link active text-base font-medium" data-page="home">الرئيسية</button>
@@ -1159,7 +1159,7 @@
1159
  <div class="grid grid-cols-1 md:grid-cols-3 gap-12 mb-12" dir="rtl">
1160
  <div>
1161
  <div class="flex items-center gap-3 mb-4">
1162
- <img src="/LOGOS/2.png" alt="بيان" width="28" height="28" style="flex-shrink:0;"><span id="footer-brand" class="text-2xl font-bold text-gradient">بيان</span>
1163
  </div>
1164
  <p class="text-sm leading-relaxed" style="color: var(--text-secondary); line-height: 1.8;">منصة ذكاء اصطناعي للكتابة العربية — تدقيق إملائي ونحوي، ترقيم، تلخيص، إكمال تلقائي، تدقيق القرآن، وتحويل اللهجات.</p>
1165
  </div>
 
7
  <meta name="supabase-anon-key" content="">
8
  <title>بيان - مساعد الكتابة العربية الذكي</title>
9
  <meta name="description" content="بيان — منصة ذكاء اصطناعي متكاملة لتصحيح الإملاء والنحو والترقيم وتلخيص النصوص والإكمال التلقائي وتدقيق القرآن الكريم وتحويل اللهجات — مصمّمة خصيصًا للغة العربية. جرّبه مجاناً!">
10
+ <meta property="og:image" content="/logos/logo-banner.png">
11
  <meta property="og:title" content="بيان — مساعدك الذكي للكتابة بالعربية">
12
  <meta property="og:description" content="تدقيق إملائي ونحوي وترقيم، تلخيص ذكي، إكمال تلقائي، تدقيق القرآن الكريم، وتحويل اللهجات">
13
  <meta name="twitter:card" content="summary_large_image">
14
+ <meta name="twitter:image" content="/logos/logo-banner.png">
15
+ <link rel="icon" type="image/png" href="/logos/logo-icon.png">
16
  <script src="https://cdn.tailwindcss.com"></script>
17
  <link rel="preconnect" href="https://fonts.googleapis.com">
18
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
 
64
  <button id="mobile-menu-btn" class="mobile-menu-btn md:hidden" aria-label="فتح القائمة" aria-expanded="false" aria-controls="mobile-drawer">
65
  <svg width="22" height="22" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/></svg>
66
  </button>
67
+ <button onclick="showPage('home')" class="flex items-center gap-3" style="background:none;border:none;cursor:pointer;" aria-label="الرئيسية"><img src="/logos/logo-transparent.png" alt="بيان" width="28" height="28" style="flex-shrink:0;"><span id="nav-brand" class="text-xl md:text-2xl font-bold text-gradient">بيان</span></button>
68
  </div>
69
  <div class="hidden md:flex items-center gap-8">
70
  <button onclick="showPage('home')" class="nav-link active text-base font-medium" data-page="home">الرئيسية</button>
 
1159
  <div class="grid grid-cols-1 md:grid-cols-3 gap-12 mb-12" dir="rtl">
1160
  <div>
1161
  <div class="flex items-center gap-3 mb-4">
1162
+ <img src="/logos/logo-transparent.png" alt="بيان" width="28" height="28" style="flex-shrink:0;"><span id="footer-brand" class="text-2xl font-bold text-gradient">بيان</span>
1163
  </div>
1164
  <p class="text-sm leading-relaxed" style="color: var(--text-secondary); line-height: 1.8;">منصة ذكاء اصطناعي للكتابة العربية — تدقيق إملائي ونحوي، ترقيم، تلخيص، إكمال تلقائي، تدقيق القرآن، وتحويل اللهجات.</p>
1165
  </div>
tests/phase10/reports/phase10_results.json CHANGED
The diff for this file is too large to render. See raw diff