Sami commited on
Commit
53873ca
Β·
1 Parent(s): 0b5a6eb

Sync changes - automated commit

Browse files
Files changed (26) hide show
  1. {demos β†’ archive/demos}/automedical/automedicalai copy.html +0 -0
  2. {docs β†’ archive/docs}/references/REFERENCE_example-propuesta-12-octubre-report copy.pdf +0 -0
  3. archive/index.html +91 -0
  4. papers/drafts/fermed-vlm-draft-1.html β†’ archive/papers/drafts/fermed-vlm-draft-1_archived.html +0 -0
  5. papers/drafts/fermed-vlm-draft-2.html β†’ archive/papers/drafts/fermed-vlm-draft-2_archived.html +0 -0
  6. papers/research/fermed-vlm-paper-v2 copy.html β†’ archive/papers/research/fermed-vlm-paper-v2 copy_archived.html +0 -0
  7. papers/research/fermed-vlm-paper-v2.html β†’ archive/papers/research/fermed-vlm-paper-v2_archived.html +0 -0
  8. papers/research/fermed-vlm-paper-v3 copy 2.html β†’ archive/papers/research/fermed-vlm-paper-v3 copy 2_archived.html +0 -0
  9. papers/research/fermed-vlm-paper-v3 copy 3.html β†’ archive/papers/research/fermed-vlm-paper-v3 copy 3_archived.html +0 -0
  10. papers/research/fermed-vlm-paper-v3 copy.html β†’ archive/papers/research/fermed-vlm-paper-v3 copy_archived.html +0 -0
  11. papers/research/fermed-vlm-paper-v3.html β†’ archive/papers/research/fermed-vlm-paper-v3_archived.html +0 -0
  12. papers/research/fermed-vlm-paper.html β†’ archive/papers/research/fermed-vlm-paper_archived.html +0 -0
  13. paper copy 2.html β†’ archive/papers/root/paper copy 2.html +0 -0
  14. paper copy.html β†’ archive/papers/root/paper copy.html +0 -0
  15. assets/css/main.css +96 -28
  16. assets/css/paper.css +152 -0
  17. assets/js/main.js +153 -33
  18. assets/js/validate.js +188 -0
  19. index.html +17 -7
  20. papers.html +63 -40
  21. papers/research/FERMED-VLM-Final_Paper.html +67 -0
  22. projects/automedical.html +25 -6
  23. proposals/nhs/nhs-proposal.html +54 -10
  24. tools/link_checker.html +127 -0
  25. tools/validate.js +161 -0
  26. website_paths.html +61 -0
{demos β†’ archive/demos}/automedical/automedicalai copy.html RENAMED
File without changes
{docs β†’ archive/docs}/references/REFERENCE_example-propuesta-12-octubre-report copy.pdf RENAMED
File without changes
archive/index.html ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="es">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Archive | IA Hospital Hub</title>
7
+ <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/tailwind.min.css" rel="stylesheet">
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
9
+ <link rel="stylesheet" href="/assets/css/main.css">
10
+ </head>
11
+ <body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
12
+ <!-- Include shared nav -->
13
+ <include src="/templates/nav.html"></include>
14
+
15
+ <main class="container mx-auto px-4 py-8">
16
+ <div class="flex items-center mb-8">
17
+ <a href="/papers.html" class="text-blue-400 hover:text-blue-300 mr-4">
18
+ <i class="fas fa-arrow-left"></i>
19
+ <span lang="es">Volver a Papers</span>
20
+ <span lang="en">Back to Papers</span>
21
+ </a>
22
+ <h1 class="text-4xl font-bold text-blue-400">
23
+ <span lang="es">Archivo</span>
24
+ <span lang="en">Archive</span>
25
+ </h1>
26
+ </div>
27
+
28
+ <div class="space-y-8">
29
+ <section>
30
+ <h2 class="text-2xl font-bold mb-4 text-blue-300">
31
+ <span lang="es">Papers de InvestigaciΓ³n</span>
32
+ <span lang="en">Research Papers</span>
33
+ </h2>
34
+ <div class="grid gap-4">
35
+ <a href="papers/research/fermed-vlm-paper-v3_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
36
+ <h3 class="font-semibold text-blue-400">FERMED VLM Paper v3</h3>
37
+ <p class="text-gray-400 text-sm">Version 3 of the FERMED VLM research paper</p>
38
+ </a>
39
+ <a href="papers/research/fermed-vlm-paper-v2_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
40
+ <h3 class="font-semibold text-blue-400">FERMED VLM Paper v2</h3>
41
+ <p class="text-gray-400 text-sm">Version 2 of the FERMED VLM research paper</p>
42
+ </a>
43
+ <a href="papers/research/fermed-vlm-paper_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
44
+ <h3 class="font-semibold text-blue-400">FERMED VLM Paper v1</h3>
45
+ <p class="text-gray-400 text-sm">Initial version of the FERMED VLM research paper</p>
46
+ </a>
47
+ </div>
48
+ </section>
49
+
50
+ <section>
51
+ <h2 class="text-2xl font-bold mb-4 text-blue-300">
52
+ <span lang="es">Borradores</span>
53
+ <span lang="en">Drafts</span>
54
+ </h2>
55
+ <div class="grid gap-4">
56
+ <a href="papers/drafts/fermed-vlm-draft-2_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
57
+ <h3 class="font-semibold text-blue-400">FERMED VLM Draft 2</h3>
58
+ <p class="text-gray-400 text-sm">Second draft of the FERMED VLM paper</p>
59
+ </a>
60
+ <a href="papers/drafts/fermed-vlm-draft-1_archived.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
61
+ <h3 class="font-semibold text-blue-400">FERMED VLM Draft 1</h3>
62
+ <p class="text-gray-400 text-sm">First draft of the FERMED VLM paper</p>
63
+ </a>
64
+ </div>
65
+ </section>
66
+
67
+ <section>
68
+ <h2 class="text-2xl font-bold mb-4 text-blue-300">
69
+ <span lang="es">Otros Documentos</span>
70
+ <span lang="en">Other Documents</span>
71
+ </h2>
72
+ <div class="grid gap-4">
73
+ <a href="papers/root/paper copy.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
74
+ <h3 class="font-semibold text-blue-400">Previous Paper Version</h3>
75
+ <p class="text-gray-400 text-sm">Earlier version of the paper</p>
76
+ </a>
77
+ <a href="papers/root/paper copy 2.html" class="block bg-gray-800 bg-opacity-50 p-4 rounded-lg hover:bg-opacity-70 transition-all">
78
+ <h3 class="font-semibold text-blue-400">Previous Paper Version 2</h3>
79
+ <p class="text-gray-400 text-sm">Earlier version of the paper</p>
80
+ </a>
81
+ </div>
82
+ </section>
83
+ </div>
84
+ </main>
85
+
86
+ <!-- Include shared footer -->
87
+ <include src="/templates/footer.html"></include>
88
+
89
+ <script src="/assets/js/main.js"></script>
90
+ </body>
91
+ </html>
papers/drafts/fermed-vlm-draft-1.html β†’ archive/papers/drafts/fermed-vlm-draft-1_archived.html RENAMED
File without changes
papers/drafts/fermed-vlm-draft-2.html β†’ archive/papers/drafts/fermed-vlm-draft-2_archived.html RENAMED
File without changes
papers/research/fermed-vlm-paper-v2 copy.html β†’ archive/papers/research/fermed-vlm-paper-v2 copy_archived.html RENAMED
File without changes
papers/research/fermed-vlm-paper-v2.html β†’ archive/papers/research/fermed-vlm-paper-v2_archived.html RENAMED
File without changes
papers/research/fermed-vlm-paper-v3 copy 2.html β†’ archive/papers/research/fermed-vlm-paper-v3 copy 2_archived.html RENAMED
File without changes
papers/research/fermed-vlm-paper-v3 copy 3.html β†’ archive/papers/research/fermed-vlm-paper-v3 copy 3_archived.html RENAMED
File without changes
papers/research/fermed-vlm-paper-v3 copy.html β†’ archive/papers/research/fermed-vlm-paper-v3 copy_archived.html RENAMED
File without changes
papers/research/fermed-vlm-paper-v3.html β†’ archive/papers/research/fermed-vlm-paper-v3_archived.html RENAMED
File without changes
papers/research/fermed-vlm-paper.html β†’ archive/papers/research/fermed-vlm-paper_archived.html RENAMED
File without changes
paper copy 2.html β†’ archive/papers/root/paper copy 2.html RENAMED
File without changes
paper copy.html β†’ archive/papers/root/paper copy.html RENAMED
File without changes
assets/css/main.css CHANGED
@@ -5,6 +5,22 @@
5
  --secondary: #4B5563;
6
  --bg-dark: #111827;
7
  --bg-darker: #0F172A;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  }
9
 
10
  /* Language toggle */
@@ -14,45 +30,107 @@
14
 
15
  /* Layout */
16
  .container {
17
- @apply max-w-6xl mx-auto px-4;
 
 
18
  }
19
 
20
  /* Navigation */
21
- .nav-link {
22
- @apply transition-all duration-300;
 
 
 
 
 
23
  }
24
- .nav-link:hover {
25
- transform: translateY(-2px);
 
 
 
 
 
26
  }
27
 
28
- /* Cards */
29
- .card {
30
- @apply transition-all duration-300 bg-gray-800 bg-opacity-50 p-6 rounded-lg border border-gray-700;
31
- background: linear-gradient(135deg, rgba(31, 41, 55, 0.98), rgba(17, 24, 39, 0.98));
32
  }
33
- .card:hover {
34
- transform: translateY(-2px);
35
- @apply shadow-lg border-opacity-50;
36
  }
37
 
38
  /* Buttons */
39
  .btn {
40
- @apply transition-all duration-300 inline-flex items-center justify-center gap-2;
 
 
 
 
 
 
41
  }
42
- .btn:hover {
43
- transform: translateY(-1px);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  }
45
 
46
  /* Timeline */
47
  .timeline ol {
48
- @apply border-l-2 border-gray-600 pl-6;
 
 
49
  }
 
50
  .timeline li {
51
- @apply relative mb-6;
 
52
  }
 
53
  .timeline li:before {
54
  content: '';
55
- @apply absolute -left-[27px] top-1 w-4 h-4 bg-blue-500 rounded-full;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  }
57
 
58
  /* Tooltips */
@@ -72,14 +150,4 @@
72
  }
73
  .contact-btn.email {
74
  @apply bg-blue-600 hover:bg-blue-700;
75
- }
76
-
77
- /* Responsive */
78
- @media (max-width: 768px) {
79
- .card {
80
- @apply p-4;
81
- }
82
- .timeline ol {
83
- @apply pl-4;
84
- }
85
  }
 
5
  --secondary: #4B5563;
6
  --bg-dark: #111827;
7
  --bg-darker: #0F172A;
8
+ --text-light: #F3F4F6;
9
+ --text-dark: #1F2937;
10
+ }
11
+
12
+ /* Global Reset */
13
+ * {
14
+ margin: 0;
15
+ padding: 0;
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ body {
20
+ font-family: system-ui, -apple-system, sans-serif;
21
+ background: var(--bg-dark);
22
+ color: var(--text-light);
23
+ line-height: 1.5;
24
  }
25
 
26
  /* Language toggle */
 
30
 
31
  /* Layout */
32
  .container {
33
+ max-width: 1200px;
34
+ margin: 0 auto;
35
+ padding: 0 1rem;
36
  }
37
 
38
  /* Navigation */
39
+ .nav-bar {
40
+ background: var(--bg-darker);
41
+ padding: 1rem;
42
+ position: sticky;
43
+ top: 0;
44
+ z-index: 50;
45
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
46
  }
47
+
48
+ .breadcrumb {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: 0.5rem;
52
+ font-size: 0.875rem;
53
+ color: var(--secondary);
54
  }
55
 
56
+ .breadcrumb a {
57
+ color: var(--primary);
58
+ text-decoration: none;
59
+ transition: color 0.2s;
60
  }
61
+
62
+ .breadcrumb a:hover {
63
+ color: var(--primary-hover);
64
  }
65
 
66
  /* Buttons */
67
  .btn {
68
+ display: inline-flex;
69
+ align-items: center;
70
+ gap: 0.5rem;
71
+ padding: 0.5rem 1rem;
72
+ border-radius: 0.5rem;
73
+ font-weight: 500;
74
+ transition: all 0.2s;
75
  }
76
+
77
+ .btn-primary {
78
+ background: var(--primary);
79
+ color: white;
80
+ }
81
+
82
+ .btn-primary:hover {
83
+ background: var(--primary-hover);
84
+ }
85
+
86
+ /* Cards */
87
+ .card {
88
+ background: rgba(255, 255, 255, 0.05);
89
+ border-radius: 0.5rem;
90
+ padding: 1.5rem;
91
+ transition: transform 0.2s;
92
+ }
93
+
94
+ .card:hover {
95
+ transform: translateY(-2px);
96
  }
97
 
98
  /* Timeline */
99
  .timeline ol {
100
+ border-left: 2px solid var(--secondary);
101
+ padding-left: 1.5rem;
102
+ margin-left: 1rem;
103
  }
104
+
105
  .timeline li {
106
+ position: relative;
107
+ margin-bottom: 1.5rem;
108
  }
109
+
110
  .timeline li:before {
111
  content: '';
112
+ position: absolute;
113
+ left: -1.75rem;
114
+ top: 0.25rem;
115
+ width: 1rem;
116
+ height: 1rem;
117
+ background: var(--primary);
118
+ border-radius: 50%;
119
+ }
120
+
121
+ /* Responsive */
122
+ @media (max-width: 768px) {
123
+ .container {
124
+ padding: 0 0.5rem;
125
+ }
126
+
127
+ .nav-bar {
128
+ padding: 0.5rem;
129
+ }
130
+
131
+ .breadcrumb {
132
+ font-size: 0.75rem;
133
+ }
134
  }
135
 
136
  /* Tooltips */
 
150
  }
151
  .contact-btn.email {
152
  @apply bg-blue-600 hover:bg-blue-700;
 
 
 
 
 
 
 
 
 
 
153
  }
assets/css/paper.css ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Paper Styles */
2
+ :root {
3
+ --paper-bg: #ffffff;
4
+ --paper-text: #2c3e50;
5
+ --paper-border: #e2e8f0;
6
+ --paper-accent: #3498db;
7
+ }
8
+
9
+ body.paper {
10
+ font-family: 'Georgia', serif;
11
+ background: var(--paper-bg);
12
+ color: var(--paper-text);
13
+ line-height: 1.6;
14
+ padding: 2rem;
15
+ max-width: 900px;
16
+ margin: 0 auto;
17
+ }
18
+
19
+ /* Typography */
20
+ .paper h1,
21
+ .paper h2,
22
+ .paper h3,
23
+ .paper h4 {
24
+ font-family: 'Georgia', serif;
25
+ line-height: 1.3;
26
+ margin-top: 1.5em;
27
+ color: var(--paper-text);
28
+ }
29
+
30
+ .paper h1 {
31
+ font-size: 2.5rem;
32
+ text-align: center;
33
+ margin-bottom: 2rem;
34
+ padding-bottom: 1rem;
35
+ border-bottom: 2px solid var(--paper-border);
36
+ }
37
+
38
+ .paper h2 {
39
+ font-size: 2rem;
40
+ margin: 3rem 0 2rem;
41
+ padding-bottom: 0.5rem;
42
+ border-bottom: 2px solid var(--paper-border);
43
+ }
44
+
45
+ .paper h3 {
46
+ font-size: 1.5rem;
47
+ margin: 2rem 0 1rem;
48
+ }
49
+
50
+ /* Content */
51
+ .paper p {
52
+ margin-bottom: 1.5rem;
53
+ text-align: justify;
54
+ }
55
+
56
+ .paper a {
57
+ color: var(--paper-accent);
58
+ text-decoration: none;
59
+ }
60
+
61
+ .paper a:hover {
62
+ text-decoration: underline;
63
+ }
64
+
65
+ /* Paper Components */
66
+ .paper .abstract,
67
+ .paper .keywords {
68
+ background-color: #f8f9fa;
69
+ padding: 1.5rem;
70
+ border-radius: 5px;
71
+ margin: 2rem 0;
72
+ border-left: 3px solid var(--paper-text);
73
+ }
74
+
75
+ .paper .figure {
76
+ margin: 2.5rem auto;
77
+ text-align: center;
78
+ }
79
+
80
+ .paper .figure img {
81
+ max-width: 90%;
82
+ border-radius: 8px;
83
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
84
+ }
85
+
86
+ .paper .caption {
87
+ font-size: 0.9rem;
88
+ font-style: italic;
89
+ color: #666;
90
+ margin-top: 1rem;
91
+ }
92
+
93
+ .paper .references {
94
+ margin-top: 3rem;
95
+ padding: 2rem;
96
+ border-top: 2px solid var(--paper-border);
97
+ }
98
+
99
+ .paper .references ol {
100
+ padding-left: 1.5rem;
101
+ }
102
+
103
+ .paper .references li {
104
+ margin-bottom: 1rem;
105
+ font-size: 0.95rem;
106
+ }
107
+
108
+ /* Code and Diagrams */
109
+ .paper .code-example,
110
+ .paper .diagram-container {
111
+ background: #f8f9fa;
112
+ padding: 1.5rem;
113
+ border-radius: 8px;
114
+ margin: 2rem auto;
115
+ max-width: 800px;
116
+ box-shadow: 0 2px 4px rgba(0,0,0,0.05);
117
+ }
118
+
119
+ .paper pre code {
120
+ display: block;
121
+ padding: 1rem;
122
+ background: white;
123
+ border-radius: 4px;
124
+ border: 1px solid #e0e0e0;
125
+ font-family: 'Consolas', monospace;
126
+ font-size: 0.9rem;
127
+ line-height: 1.5;
128
+ overflow-x: auto;
129
+ }
130
+
131
+ /* Responsive */
132
+ @media (max-width: 768px) {
133
+ body.paper {
134
+ padding: 1rem;
135
+ }
136
+
137
+ .paper h1 {
138
+ font-size: 2rem;
139
+ }
140
+
141
+ .paper h2 {
142
+ font-size: 1.75rem;
143
+ }
144
+
145
+ .paper h3 {
146
+ font-size: 1.5rem;
147
+ }
148
+
149
+ .paper .figure img {
150
+ max-width: 100%;
151
+ }
152
+ }
assets/js/main.js CHANGED
@@ -58,26 +58,166 @@ window.hospitalAI = {
58
  initComponents
59
  };
60
 
 
 
61
  // Language handling
62
- const LanguageManager = {
63
- toggle() {
64
- const body = document.body;
65
- const currentLang = body.getAttribute('data-language');
66
- const newLang = currentLang === 'es' ? 'en' : 'es';
67
- body.setAttribute('data-language', newLang);
68
- body.classList.toggle('lang-en');
69
- localStorage.setItem('preferred-language', newLang);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  },
 
 
 
 
 
 
 
 
 
 
 
71
 
72
- initialize() {
73
- const preferredLanguage = localStorage.getItem('preferred-language') || 'es';
74
- if (preferredLanguage === 'en') {
75
- document.body.setAttribute('data-language', 'en');
76
- document.body.classList.add('lang-en');
 
 
 
 
 
 
 
 
 
 
77
  }
78
  }
79
  };
80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  // Document viewer
82
  const DocViewer = {
83
  open(url) {
@@ -97,26 +237,6 @@ const DocViewer = {
97
  }
98
  };
99
 
100
- // Initialize everything
101
- document.addEventListener('DOMContentLoaded', () => {
102
- LanguageManager.initialize();
103
-
104
- // Close doc viewer on escape
105
- document.addEventListener('keydown', (e) => {
106
- if (e.key === 'Escape') DocViewer.close();
107
- });
108
-
109
- // Smooth scroll for anchor links
110
- document.querySelectorAll('a[href^="#"]').forEach(anchor => {
111
- anchor.addEventListener('click', (e) => {
112
- e.preventDefault();
113
- document.querySelector(anchor.getAttribute('href'))
114
- .scrollIntoView({ behavior: 'smooth' });
115
- });
116
- });
117
- });
118
-
119
  // Export for global use
120
- window.toggleLanguage = LanguageManager.toggle;
121
  window.openDoc = DocViewer.open;
122
  window.closeDoc = DocViewer.close;
 
58
  initComponents
59
  };
60
 
61
+ // Main JavaScript for Hospital AI Website
62
+
63
  // Language handling
64
+ const languageHandler = {
65
+ // Available languages
66
+ languages: ['es', 'en'],
67
+
68
+ // Get current language
69
+ getCurrentLanguage() {
70
+ return document.body.getAttribute('data-language') || 'es';
71
+ },
72
+
73
+ // Set language
74
+ setLanguage(lang) {
75
+ if (this.languages.includes(lang)) {
76
+ document.body.setAttribute('data-language', lang);
77
+ document.body.classList.toggle('lang-en', lang === 'en');
78
+ localStorage.setItem('preferred-language', lang);
79
+ this.updateMetaTags(lang);
80
+ }
81
+ },
82
+
83
+ // Update meta tags for language
84
+ updateMetaTags(lang) {
85
+ document.documentElement.lang = lang;
86
+ const title = document.querySelector('title');
87
+ if (title) {
88
+ title.textContent = title.getAttribute(`data-${lang}`) || title.textContent;
89
+ }
90
+ },
91
+
92
+ // Initialize language
93
+ init() {
94
+ const savedLang = localStorage.getItem('preferred-language');
95
+ if (savedLang) {
96
+ this.setLanguage(savedLang);
97
+ }
98
+ }
99
+ };
100
+
101
+ // Navigation handling
102
+ const navigationHandler = {
103
+ // Update active state
104
+ updateActiveState() {
105
+ const currentPath = window.location.pathname;
106
+ document.querySelectorAll('nav a').forEach(link => {
107
+ const href = link.getAttribute('href');
108
+ if (href === currentPath) {
109
+ link.classList.add('active');
110
+ } else {
111
+ link.classList.remove('active');
112
+ }
113
+ });
114
+ },
115
+
116
+ // Update breadcrumbs
117
+ updateBreadcrumbs() {
118
+ const breadcrumb = document.querySelector('.breadcrumb');
119
+ if (breadcrumb) {
120
+ const currentPath = window.location.pathname;
121
+ const pathParts = currentPath.split('/').filter(Boolean);
122
+ let currentLink = '';
123
+ const breadcrumbHTML = pathParts.map((part, index) => {
124
+ currentLink += `/${part}`;
125
+ return `
126
+ <a href="${currentLink}">${part}</a>
127
+ ${index < pathParts.length - 1 ? '<span>/</span>' : ''}
128
+ `;
129
+ }).join('');
130
+ breadcrumb.innerHTML = `
131
+ <a href="/">Home</a>
132
+ ${pathParts.length ? '<span>/</span>' : ''}
133
+ ${breadcrumbHTML}
134
+ `;
135
+ }
136
  },
137
+
138
+ // Initialize navigation
139
+ init() {
140
+ this.updateActiveState();
141
+ this.updateBreadcrumbs();
142
+ window.addEventListener('popstate', () => {
143
+ this.updateActiveState();
144
+ this.updateBreadcrumbs();
145
+ });
146
+ }
147
+ };
148
 
149
+ // Dark mode handling
150
+ const darkModeHandler = {
151
+ // Toggle dark mode
152
+ toggle() {
153
+ document.documentElement.classList.toggle('dark');
154
+ const isDark = document.documentElement.classList.contains('dark');
155
+ localStorage.setItem('dark-mode', isDark ? 'dark' : 'light');
156
+ },
157
+
158
+ // Initialize dark mode
159
+ init() {
160
+ const savedMode = localStorage.getItem('dark-mode');
161
+ const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
162
+ if (savedMode === 'dark' || (!savedMode && prefersDark)) {
163
+ document.documentElement.classList.add('dark');
164
  }
165
  }
166
  };
167
 
168
+ // Smooth scrolling
169
+ const scrollHandler = {
170
+ init() {
171
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
172
+ anchor.addEventListener('click', (e) => {
173
+ e.preventDefault();
174
+ const target = document.querySelector(anchor.getAttribute('href'));
175
+ if (target) {
176
+ target.scrollIntoView({
177
+ behavior: 'smooth',
178
+ block: 'start'
179
+ });
180
+ }
181
+ });
182
+ });
183
+ }
184
+ };
185
+
186
+ // Initialize everything
187
+ document.addEventListener('DOMContentLoaded', () => {
188
+ languageHandler.init();
189
+ navigationHandler.init();
190
+ darkModeHandler.init();
191
+ scrollHandler.init();
192
+
193
+ // Close doc viewer on escape
194
+ document.addEventListener('keydown', (e) => {
195
+ if (e.key === 'Escape') DocViewer.close();
196
+ });
197
+ });
198
+
199
+ // Global language toggle function
200
+ function toggleLanguage() {
201
+ const currentLang = languageHandler.getCurrentLanguage();
202
+ const newLang = currentLang === 'es' ? 'en' : 'es';
203
+ languageHandler.setLanguage(newLang);
204
+ }
205
+
206
+ // Global dark mode toggle function
207
+ function toggleDarkMode() {
208
+ darkModeHandler.toggle();
209
+ }
210
+
211
+ // Export for use in Node.js environments
212
+ if (typeof module !== 'undefined' && module.exports) {
213
+ module.exports = {
214
+ languageHandler,
215
+ navigationHandler,
216
+ darkModeHandler,
217
+ scrollHandler
218
+ };
219
+ }
220
+
221
  // Document viewer
222
  const DocViewer = {
223
  open(url) {
 
237
  }
238
  };
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  // Export for global use
 
241
  window.openDoc = DocViewer.open;
242
  window.closeDoc = DocViewer.close;
assets/js/validate.js ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Website Validation Script
2
+
3
+ const validateWebsite = {
4
+ // Critical paths that must exist and be accessible
5
+ criticalPaths: [
6
+ '/',
7
+ '/projects',
8
+ '/papers',
9
+ '/proposals',
10
+ '/docs'
11
+ ],
12
+
13
+ // Project paths
14
+ projectPaths: [
15
+ '/projects/automedical',
16
+ '/projects/analytics',
17
+ '/projects/autoglaucoma'
18
+ ],
19
+
20
+ // Paper paths
21
+ paperPaths: [
22
+ '/papers/fermed-vlm',
23
+ '/papers/archive/research',
24
+ '/papers/archive/publications'
25
+ ],
26
+
27
+ // Proposal paths
28
+ proposalPaths: [
29
+ '/proposals/nhs/main',
30
+ '/proposals/nhs/detailed',
31
+ '/proposals/nhs/formal'
32
+ ],
33
+
34
+ // Documentation paths
35
+ docPaths: [
36
+ '/docs/main',
37
+ '/docs/api',
38
+ '/docs/deployment'
39
+ ],
40
+
41
+ // Validate all links
42
+ async validateLinks() {
43
+ const results = {
44
+ working: [],
45
+ redirects: [],
46
+ broken: []
47
+ };
48
+
49
+ const allPaths = [
50
+ ...this.criticalPaths,
51
+ ...this.projectPaths,
52
+ ...this.paperPaths,
53
+ ...this.proposalPaths,
54
+ ...this.docPaths
55
+ ];
56
+
57
+ for (const path of allPaths) {
58
+ try {
59
+ const response = await fetch(path);
60
+ if (response.ok) {
61
+ if (response.redirected) {
62
+ results.redirects.push({
63
+ path,
64
+ redirectTo: response.url
65
+ });
66
+ } else {
67
+ results.working.push(path);
68
+ }
69
+ } else {
70
+ results.broken.push({
71
+ path,
72
+ status: response.status
73
+ });
74
+ }
75
+ } catch (error) {
76
+ results.broken.push({
77
+ path,
78
+ error: error.message
79
+ });
80
+ }
81
+ }
82
+
83
+ return results;
84
+ },
85
+
86
+ // Validate navigation consistency
87
+ validateNavigation() {
88
+ const results = {
89
+ consistent: true,
90
+ errors: []
91
+ };
92
+
93
+ // Check if all pages have navigation
94
+ document.querySelectorAll('nav').forEach(nav => {
95
+ const links = nav.querySelectorAll('a');
96
+ const requiredLinks = ['Home', 'Projects', 'Papers', 'Proposals', 'Documentation'];
97
+
98
+ const missingLinks = requiredLinks.filter(required =>
99
+ ![...links].some(link =>
100
+ link.textContent.trim().toLowerCase() === required.toLowerCase()
101
+ )
102
+ );
103
+
104
+ if (missingLinks.length > 0) {
105
+ results.consistent = false;
106
+ results.errors.push({
107
+ page: window.location.pathname,
108
+ missingLinks
109
+ });
110
+ }
111
+ });
112
+
113
+ return results;
114
+ },
115
+
116
+ // Validate breadcrumbs
117
+ validateBreadcrumbs() {
118
+ const results = {
119
+ valid: true,
120
+ errors: []
121
+ };
122
+
123
+ document.querySelectorAll('.breadcrumb').forEach(breadcrumb => {
124
+ const links = breadcrumb.querySelectorAll('a');
125
+ const currentPath = window.location.pathname;
126
+ const pathParts = currentPath.split('/').filter(Boolean);
127
+
128
+ // First link should always be Home
129
+ if (links[0]?.getAttribute('href') !== '/') {
130
+ results.valid = false;
131
+ results.errors.push({
132
+ page: currentPath,
133
+ error: 'Missing home link in breadcrumb'
134
+ });
135
+ }
136
+
137
+ // Check if breadcrumb matches current path
138
+ pathParts.forEach((part, index) => {
139
+ const link = links[index + 1];
140
+ if (!link || !link.getAttribute('href').includes(part)) {
141
+ results.valid = false;
142
+ results.errors.push({
143
+ page: currentPath,
144
+ error: `Invalid breadcrumb path at level ${index + 1}`
145
+ });
146
+ }
147
+ });
148
+ });
149
+
150
+ return results;
151
+ },
152
+
153
+ // Generate validation report
154
+ async generateReport() {
155
+ const linkResults = await this.validateLinks();
156
+ const navResults = this.validateNavigation();
157
+ const breadcrumbResults = this.validateBreadcrumbs();
158
+
159
+ return {
160
+ timestamp: new Date().toISOString(),
161
+ links: {
162
+ total: linkResults.working.length + linkResults.redirects.length + linkResults.broken.length,
163
+ working: linkResults.working.length,
164
+ redirects: linkResults.redirects.length,
165
+ broken: linkResults.broken.length,
166
+ details: linkResults
167
+ },
168
+ navigation: {
169
+ consistent: navResults.consistent,
170
+ errors: navResults.errors
171
+ },
172
+ breadcrumbs: {
173
+ valid: breadcrumbResults.valid,
174
+ errors: breadcrumbResults.errors
175
+ }
176
+ };
177
+ }
178
+ };
179
+
180
+ // Export for use in Node.js environments
181
+ if (typeof module !== 'undefined' && module.exports) {
182
+ module.exports = validateWebsite;
183
+ }
184
+
185
+ // For browser use
186
+ if (typeof window !== 'undefined') {
187
+ window.validateWebsite = validateWebsite;
188
+ }
index.html CHANGED
@@ -5,17 +5,26 @@
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>Hospital AI Solutions - Transforming Healthcare</title>
7
  <link href="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.2.1/flowbite.min.css" rel="stylesheet" />
 
8
  <script src="https://cdn.tailwindcss.com"></script>
9
  </head>
10
- <body class="bg-gray-50">
11
  <!-- Navbar -->
12
  <nav class="bg-white border-gray-200 dark:bg-gray-900 fixed w-full z-50">
13
  <div class="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-4">
14
- <a href="#" class="flex items-center space-x-3 rtl:space-x-reverse">
 
15
  <span class="self-center text-2xl font-semibold whitespace-nowrap dark:text-white">Hospital AI</span>
16
  </a>
17
- <div class="flex md:order-2 space-x-3 md:space-x-0 rtl:space-x-reverse">
18
- <button type="button" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-4 py-2 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">Get Started</button>
 
 
 
 
 
 
 
19
  </div>
20
  </div>
21
  </nav>
@@ -26,13 +35,13 @@
26
  <h1 class="mb-4 text-4xl font-extrabold tracking-tight leading-none text-gray-900 md:text-5xl lg:text-6xl dark:text-white">AI-Powered Healthcare Solutions</h1>
27
  <p class="mb-8 text-lg font-normal text-gray-500 lg:text-xl sm:px-16 lg:px-48 dark:text-gray-400">Transform your healthcare facility with cutting-edge AI solutions designed to improve patient care, streamline operations, and enhance medical decision-making.</p>
28
  <div class="flex flex-col space-y-4 sm:flex-row sm:justify-center sm:space-y-0">
29
- <a href="#" class="inline-flex justify-center items-center py-3 px-5 text-base font-medium text-center text-white rounded-lg bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-900">
30
  View Proposal
31
  <svg class="w-3.5 h-3.5 ms-2 rtl:rotate-180" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10">
32
  <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1 5h12m0 0L9 1m4 4L9 9"/>
33
  </svg>
34
  </a>
35
- <a href="#" class="inline-flex justify-center items-center py-3 px-5 sm:ms-4 text-base font-medium text-center text-gray-900 rounded-lg border border-gray-300 hover:bg-gray-100 focus:ring-4 focus:ring-gray-100 dark:text-white dark:border-gray-700 dark:hover:bg-gray-700 dark:focus:ring-gray-800">
36
  Learn more
37
  </a>
38
  </div>
@@ -78,11 +87,12 @@
78
  <div class="mx-auto max-w-screen-sm text-center">
79
  <h2 class="mb-4 text-4xl tracking-tight font-extrabold leading-tight text-gray-900 dark:text-white">Ready to transform your healthcare facility?</h2>
80
  <p class="mb-6 font-light text-gray-500 dark:text-gray-400 md:text-lg">Contact us today to learn how our AI solutions can help you improve patient care and operational efficiency.</p>
81
- <a href="#" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800">Get in touch</a>
82
  </div>
83
  </div>
84
  </section>
85
 
86
  <script src="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.2.1/flowbite.min.js"></script>
 
87
  </body>
88
  </html>
 
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>Hospital AI Solutions - Transforming Healthcare</title>
7
  <link href="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.2.1/flowbite.min.css" rel="stylesheet" />
8
+ <link rel="stylesheet" href="/assets/css/main.css">
9
  <script src="https://cdn.tailwindcss.com"></script>
10
  </head>
11
+ <body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="en">
12
  <!-- Navbar -->
13
  <nav class="bg-white border-gray-200 dark:bg-gray-900 fixed w-full z-50">
14
  <div class="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-4">
15
+ <a href="/" class="flex items-center space-x-3 rtl:space-x-reverse">
16
+ <img src="/assets/images/logo.png" alt="Hospital AI" class="w-8 h-8">
17
  <span class="self-center text-2xl font-semibold whitespace-nowrap dark:text-white">Hospital AI</span>
18
  </a>
19
+ <div class="flex items-center gap-4">
20
+ <a href="/projects" class="text-gray-300 hover:text-blue-400">Projects</a>
21
+ <a href="/papers" class="text-gray-300 hover:text-blue-400">Papers</a>
22
+ <a href="/proposals" class="text-gray-300 hover:text-blue-400">Proposals</a>
23
+ <a href="/docs" class="text-gray-300 hover:text-blue-400">Documentation</a>
24
+ <button onclick="toggleLanguage()" class="bg-blue-500 px-3 py-1 rounded-full text-sm hover:bg-blue-600">
25
+ <span lang="es">EN</span>
26
+ <span lang="en">ES</span>
27
+ </button>
28
  </div>
29
  </div>
30
  </nav>
 
35
  <h1 class="mb-4 text-4xl font-extrabold tracking-tight leading-none text-gray-900 md:text-5xl lg:text-6xl dark:text-white">AI-Powered Healthcare Solutions</h1>
36
  <p class="mb-8 text-lg font-normal text-gray-500 lg:text-xl sm:px-16 lg:px-48 dark:text-gray-400">Transform your healthcare facility with cutting-edge AI solutions designed to improve patient care, streamline operations, and enhance medical decision-making.</p>
37
  <div class="flex flex-col space-y-4 sm:flex-row sm:justify-center sm:space-y-0">
38
+ <a href="/proposals/nhs/main" class="inline-flex justify-center items-center py-3 px-5 text-base font-medium text-center text-white rounded-lg bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-900">
39
  View Proposal
40
  <svg class="w-3.5 h-3.5 ms-2 rtl:rotate-180" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10">
41
  <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1 5h12m0 0L9 1m4 4L9 9"/>
42
  </svg>
43
  </a>
44
+ <a href="/papers" class="inline-flex justify-center items-center py-3 px-5 sm:ms-4 text-base font-medium text-center text-gray-900 rounded-lg border border-gray-300 hover:bg-gray-100 focus:ring-4 focus:ring-gray-100 dark:text-white dark:border-gray-700 dark:hover:bg-gray-700 dark:focus:ring-gray-800">
45
  Learn more
46
  </a>
47
  </div>
 
87
  <div class="mx-auto max-w-screen-sm text-center">
88
  <h2 class="mb-4 text-4xl tracking-tight font-extrabold leading-tight text-gray-900 dark:text-white">Ready to transform your healthcare facility?</h2>
89
  <p class="mb-6 font-light text-gray-500 dark:text-gray-400 md:text-lg">Contact us today to learn how our AI solutions can help you improve patient care and operational efficiency.</p>
90
+ <a href="/docs/main" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800">Get in touch</a>
91
  </div>
92
  </div>
93
  </section>
94
 
95
  <script src="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.2.1/flowbite.min.js"></script>
96
+ <script src="/assets/js/main.js"></script>
97
  </body>
98
  </html>
papers.html CHANGED
@@ -10,68 +10,91 @@
10
  </head>
11
  <body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
12
  <!-- Include shared nav -->
13
- <include src="/templates/nav.html"></include>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
- <main class="container">
16
- <h1 class="text-4xl font-bold mb-8 text-blue-400 text-center">
17
- <span lang="es">ArtΓ­culos e InvestigaciΓ³n</span>
18
- <span lang="en">Papers & Research</span>
19
- </h1>
20
  <div class="grid md:grid-cols-2 gap-8">
21
  <div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
22
  <h2 class="text-2xl font-bold mb-4 text-blue-400">
23
- <span lang="es">Fermed VLM Paper</span>
24
- <span lang="en">Fermed VLM Paper</span>
25
  </h2>
26
  <p class="text-gray-300 mb-4">
27
- <span lang="es">Un anΓ‘lisis profundo del modelo Fermed VLM.</span>
28
- <span lang="en">An in-depth analysis of the Fermed VLM model.</span>
29
  </p>
30
- <a href="papers/research/fermed-vlm-paper.html" class="btn bg-blue-600 hover:bg-blue-700 p-3 rounded-md inline-block">
31
- <span lang="es">Leer mΓ‘s</span>
32
- <span lang="en">Read More</span>
33
- </a>
34
- </div>
35
- <div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
36
- <h2 class="text-2xl font-bold mb-4 text-blue-400">
37
- <span lang="es">Fermed VLM Paper v2</span>
38
- <span lang="en">Fermed VLM Paper v2</span>
39
- </h2>
40
- <p class="text-gray-300 mb-4">
41
- <span lang="es">Una versiΓ³n actualizada del modelo Fermed VLM.</span>
42
- <span lang="en">An updated version of the Fermed VLM model.</span>
43
- </p>
44
- <a href="papers/research/fermed-vlm-paper-v2.html" class="btn bg-blue-600 hover:bg-blue-700 p-3 rounded-md inline-block">
45
- <span lang="es">Leer mΓ‘s</span>
46
- <span lang="en">Read More</span>
47
  </a>
48
  </div>
 
49
  <div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
50
  <h2 class="text-2xl font-bold mb-4 text-blue-400">
51
- <span lang="es">Borrador Fermed VLM 1</span>
52
- <span lang="en">Fermed VLM Draft 1</span>
53
  </h2>
54
  <p class="text-gray-300 mb-4">
55
- <span lang="es">Primer borrador del paper Fermed VLM.</span>
56
- <span lang="en">First draft of the Fermed VLM paper.</span>
57
  </p>
58
- <a href="papers/drafts/fermed-vlm-draft-1.html" class="btn bg-blue-600 hover:bg-blue-700 p-3 rounded-md inline-block">
 
59
  <span lang="es">Leer mΓ‘s</span>
60
  <span lang="en">Read More</span>
61
  </a>
62
  </div>
63
- <div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
 
64
  <h2 class="text-2xl font-bold mb-4 text-blue-400">
65
- <span lang="es">Borrador Fermed VLM 2</span>
66
- <span lang="en">Fermed VLM Draft 2</span>
67
  </h2>
68
  <p class="text-gray-300 mb-4">
69
- <span lang="es">Segundo borrador del paper Fermed VLM.</span>
70
- <span lang="en">Second draft of the Fermed VLM paper.</span>
71
  </p>
72
- <a href="papers/drafts/fermed-vlm-draft-2.html" class="btn bg-blue-600 hover:bg-blue-700 p-3 rounded-md inline-block">
73
- <span lang="es">Leer mΓ‘s</span>
74
- <span lang="en">Read More</span>
 
75
  </a>
76
  </div>
77
  </div>
 
10
  </head>
11
  <body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
12
  <!-- Include shared nav -->
13
+ <nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
14
+ <div class="max-w-6xl mx-auto flex justify-between items-center">
15
+ <div class="flex items-center gap-4">
16
+ <a href="/" class="text-2xl font-bold text-blue-400 flex items-center gap-2">
17
+ <img src="/assets/images/logo.png" alt="Hospital AI" class="w-8 h-8">
18
+ <span class="text-lg">Hospital AI</span>
19
+ </a>
20
+ <div class="breadcrumb">
21
+ <a href="/">Home</a>
22
+ <span>/</span>
23
+ <span>Papers</span>
24
+ </div>
25
+ </div>
26
+ <div class="flex items-center gap-4">
27
+ <a href="/projects" class="text-gray-300 hover:text-blue-400">Projects</a>
28
+ <a href="/papers" class="text-gray-300 hover:text-blue-400">Papers</a>
29
+ <a href="/proposals" class="text-gray-300 hover:text-blue-400">Proposals</a>
30
+ <a href="/docs" class="text-gray-300 hover:text-blue-400">Documentation</a>
31
+ <button onclick="toggleLanguage()" class="bg-blue-500 px-3 py-1 rounded-full text-sm hover:bg-blue-600">
32
+ <span lang="es">EN</span>
33
+ <span lang="en">ES</span>
34
+ </button>
35
+ </div>
36
+ </div>
37
+ </nav>
38
+
39
+ <main class="container mx-auto px-4 py-8">
40
+ <div class="flex items-center mb-8">
41
+ <a href="/" class="text-blue-400 hover:text-blue-300 mr-4">
42
+ <i class="fas fa-arrow-left"></i>
43
+ <span lang="es">Volver</span>
44
+ <span lang="en">Back</span>
45
+ </a>
46
+ <h1 class="text-4xl font-bold text-blue-400">
47
+ <span lang="es">ArtΓ­culos e InvestigaciΓ³n</span>
48
+ <span lang="en">Papers & Research</span>
49
+ </h1>
50
+ </div>
51
 
 
 
 
 
 
52
  <div class="grid md:grid-cols-2 gap-8">
53
  <div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
54
  <h2 class="text-2xl font-bold mb-4 text-blue-400">
55
+ <span lang="es">FERMED: Vision-Language Framework</span>
56
+ <span lang="en">FERMED: Vision-Language Framework</span>
57
  </h2>
58
  <p class="text-gray-300 mb-4">
59
+ <span lang="es">Marco de trabajo Vision-Language para diagnΓ³stico mΓ©dico multimodal.</span>
60
+ <span lang="en">Vision-Language Framework for Multimodal Medical Diagnosis.</span>
61
  </p>
62
+ <a href="papers/research/FERMED- Vision-Language Framework for Multimodal Medical Diagnosis.pdf" class="btn bg-blue-600 hover:bg-blue-700 p-3 rounded-md inline-block">
63
+ <i class="fas fa-file-pdf mr-2"></i>
64
+ <span lang="es">Ver PDF</span>
65
+ <span lang="en">View PDF</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  </a>
67
  </div>
68
+
69
  <div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg">
70
  <h2 class="text-2xl font-bold mb-4 text-blue-400">
71
+ <span lang="es">FERMED VLM: Paper Final</span>
72
+ <span lang="en">FERMED VLM: Final Paper</span>
73
  </h2>
74
  <p class="text-gray-300 mb-4">
75
+ <span lang="es">La versiΓ³n final del paper FERMED VLM con todos los resultados y conclusiones.</span>
76
+ <span lang="en">The final version of the FERMED VLM paper with all results and conclusions.</span>
77
  </p>
78
+ <a href="papers/research/FERMED-VLM-Final_Paper.html" class="btn bg-blue-600 hover:bg-blue-700 p-3 rounded-md inline-block">
79
+ <i class="fas fa-book mr-2"></i>
80
  <span lang="es">Leer mΓ‘s</span>
81
  <span lang="en">Read More</span>
82
  </a>
83
  </div>
84
+
85
+ <div class="bg-gray-800 bg-opacity-50 p-6 rounded-lg shadow-lg col-span-2">
86
  <h2 class="text-2xl font-bold mb-4 text-blue-400">
87
+ <span lang="es">Versiones Anteriores</span>
88
+ <span lang="en">Previous Versions</span>
89
  </h2>
90
  <p class="text-gray-300 mb-4">
91
+ <span lang="es">Las versiones anteriores de los papers estΓ‘n disponibles en nuestro archivo.</span>
92
+ <span lang="en">Previous versions of the papers are available in our archive.</span>
93
  </p>
94
+ <a href="archive/index.html" class="btn bg-gray-600 hover:bg-gray-700 p-3 rounded-md inline-block">
95
+ <i class="fas fa-archive mr-2"></i>
96
+ <span lang="es">Ver Archivo</span>
97
+ <span lang="en">View Archive</span>
98
  </a>
99
  </div>
100
  </div>
papers/research/FERMED-VLM-Final_Paper.html CHANGED
@@ -20,6 +20,54 @@
20
  font-size: 16px;
21
  }
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  .container {
24
  max-width: 960px;
25
  background: white;
@@ -584,6 +632,25 @@
584
  </head>
585
 
586
  <body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
587
  <div class="container">
588
  <div class="header">
589
  <h1>FERMED: Vision-Language Framework for Multimodal Medical Diagnosis</h1>
 
20
  font-size: 16px;
21
  }
22
 
23
+ .nav-bar {
24
+ background: #f8f9fa;
25
+ padding: 1rem;
26
+ margin-bottom: 2rem;
27
+ border-bottom: 1px solid #e9ecef;
28
+ }
29
+
30
+ .breadcrumb {
31
+ display: flex;
32
+ align-items: center;
33
+ gap: 0.5rem;
34
+ font-size: 0.875rem;
35
+ color: #6c757d;
36
+ margin-top: 0.5rem;
37
+ }
38
+
39
+ .breadcrumb a {
40
+ color: #2c3e50;
41
+ text-decoration: none;
42
+ }
43
+
44
+ .breadcrumb a:hover {
45
+ color: #1a252f;
46
+ text-decoration: underline;
47
+ }
48
+
49
+ .breadcrumb-separator {
50
+ color: #6c757d;
51
+ }
52
+
53
+ .back-button {
54
+ color: #2c3e50;
55
+ text-decoration: none;
56
+ display: inline-flex;
57
+ align-items: center;
58
+ font-family: system-ui, -apple-system, sans-serif;
59
+ transition: color 0.2s;
60
+ }
61
+
62
+ .back-button:hover {
63
+ color: #1a252f;
64
+ text-decoration: none;
65
+ }
66
+
67
+ .back-button i {
68
+ margin-right: 0.5rem;
69
+ }
70
+
71
  .container {
72
  max-width: 960px;
73
  background: white;
 
632
  </head>
633
 
634
  <body>
635
+ <div class="nav-bar">
636
+ <div class="container">
637
+ <div class="d-flex justify-content-between align-items-center">
638
+ <a href="/papers.html" class="back-button">
639
+ <i class="fas fa-arrow-left"></i>
640
+ Back to Papers
641
+ </a>
642
+ <div class="breadcrumb">
643
+ <a href="/">Home</a>
644
+ <span class="breadcrumb-separator">/</span>
645
+ <a href="/papers.html">Papers</a>
646
+ <span class="breadcrumb-separator">/</span>
647
+ <a href="/papers/research">Research</a>
648
+ <span class="breadcrumb-separator">/</span>
649
+ <span>FERMED VLM Final Paper</span>
650
+ </div>
651
+ </div>
652
+ </div>
653
+ </div>
654
  <div class="container">
655
  <div class="header">
656
  <h1>FERMED: Vision-Language Framework for Multimodal Medical Diagnosis</h1>
projects/automedical.html CHANGED
@@ -11,10 +11,29 @@
11
  <body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen">
12
  <nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
13
  <div class="max-w-6xl mx-auto flex justify-between items-center">
14
- <a href="/" class="text-2xl font-bold text-blue-400 flex items-center gap-2 no-underline">
15
- <img src="https://cdn-icons-png.flaticon.com/512/9373/9373979.png" alt="IA Hospital Hub" class="w-8 h-8 md:w-10 md:h-10 object-contain">
16
- <span class="whitespace-nowrap text-lg md:text-2xl">IA Hospital Hub</span>
17
- </a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  </div>
19
  </nav>
20
 
@@ -107,8 +126,8 @@
107
  <div class="text-center p-12 border-2 border-dashed border-gray-700 rounded-xl">
108
  <img src="https://cdn-icons-png.flaticon.com/512/9512/9512757.png" alt="Demo" class="w-24 h-24 mx-auto mb-6 opacity-50">
109
  <p class="text-gray-400 mb-6">Try AutoMedical AI's diagnostic capabilities</p>
110
- <a href="/automedical-demo-1/automedicalai.html" class="inline-flex items-center gap-2 bg-purple-500 hover:bg-purple-600 px-6 py-3 rounded-xl text-white font-medium transition-colors">
111
- <img src="https://cdn-icons-png.flaticon.com/512/1548/1548208.png" alt="Launch" class="w-5 h-5">
112
  Launch Demo
113
  </a>
114
  </div>
 
11
  <body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen">
12
  <nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
13
  <div class="max-w-6xl mx-auto flex justify-between items-center">
14
+ <div class="flex items-center gap-4">
15
+ <a href="/" class="text-2xl font-bold text-blue-400 flex items-center gap-2 no-underline">
16
+ <img src="/assets/images/logo.png" alt="Hospital AI" class="w-8 h-8">
17
+ <span class="text-lg">Hospital AI</span>
18
+ </a>
19
+ <div class="breadcrumb">
20
+ <a href="/">Home</a>
21
+ <span>/</span>
22
+ <a href="/projects">Projects</a>
23
+ <span>/</span>
24
+ <span>AutoMedical</span>
25
+ </div>
26
+ </div>
27
+ <div class="flex items-center gap-4">
28
+ <a href="/projects" class="text-gray-300 hover:text-blue-400">Projects</a>
29
+ <a href="/papers" class="text-gray-300 hover:text-blue-400">Papers</a>
30
+ <a href="/proposals" class="text-gray-300 hover:text-blue-400">Proposals</a>
31
+ <a href="/docs" class="text-gray-300 hover:text-blue-400">Documentation</a>
32
+ <button onclick="toggleLanguage()" class="bg-blue-500 px-3 py-1 rounded-full text-sm hover:bg-blue-600">
33
+ <span lang="es">EN</span>
34
+ <span lang="en">ES</span>
35
+ </button>
36
+ </div>
37
  </div>
38
  </nav>
39
 
 
126
  <div class="text-center p-12 border-2 border-dashed border-gray-700 rounded-xl">
127
  <img src="https://cdn-icons-png.flaticon.com/512/9512/9512757.png" alt="Demo" class="w-24 h-24 mx-auto mb-6 opacity-50">
128
  <p class="text-gray-400 mb-6">Try AutoMedical AI's diagnostic capabilities</p>
129
+ <a href="/automedical/demo" class="inline-flex items-center gap-2 bg-purple-500 hover:bg-purple-600 px-6 py-3 rounded-xl text-white font-medium transition-colors">
130
+ <img src="/assets/images/icons/launch.png" alt="Launch" class="w-5 h-5">
131
  Launch Demo
132
  </a>
133
  </div>
proposals/nhs/nhs-proposal.html CHANGED
@@ -29,25 +29,69 @@
29
  background: #3B82F6;
30
  border-radius: 50%;
31
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  </style>
33
  </head>
34
  <body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
35
  <nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
36
  <div class="max-w-6xl mx-auto flex justify-between items-center">
37
- <a href="/" class="text-2xl font-bold text-blue-400">
38
- <span lang="es">← Volver</span>
39
- <span lang="en">← Back</span>
40
- </a>
41
- <button onclick="toggleLanguage()" class="bg-blue-500 px-3 py-1 rounded-full text-sm hover:bg-blue-600">
42
- <span lang="es">EN</span>
43
- <span lang="en">ES</span>
44
- </button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  </div>
46
  </nav>
47
 
48
  <div class="max-w-4xl mx-auto p-8">
49
- <div class="mb-8">
50
- <!-- Remove this duplicate back link -->
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  </div>
52
 
53
  <article class="prose prose-invert max-w-none">
 
29
  background: #3B82F6;
30
  border-radius: 50%;
31
  }
32
+ .breadcrumb {
33
+ display: flex;
34
+ align-items: center;
35
+ gap: 0.5rem;
36
+ font-size: 0.875rem;
37
+ color: #9CA3AF;
38
+ }
39
+ .breadcrumb a {
40
+ color: #60A5FA;
41
+ text-decoration: none;
42
+ }
43
+ .breadcrumb a:hover {
44
+ color: #3B82F6;
45
+ }
46
  </style>
47
  </head>
48
  <body class="bg-gradient-to-br from-gray-900 to-gray-800 text-white min-h-screen" data-language="es">
49
  <nav class="bg-gray-800 bg-opacity-90 p-4 sticky top-0 z-50 shadow-lg">
50
  <div class="max-w-6xl mx-auto flex justify-between items-center">
51
+ <div class="flex items-center gap-4">
52
+ <a href="/" class="text-2xl font-bold text-blue-400 flex items-center gap-2">
53
+ <img src="/assets/images/logo.png" alt="Hospital AI" class="w-8 h-8">
54
+ <span class="text-lg">Hospital AI</span>
55
+ </a>
56
+ <div class="breadcrumb">
57
+ <a href="/">Home</a>
58
+ <span>/</span>
59
+ <a href="/proposals">Proposals</a>
60
+ <span>/</span>
61
+ <a href="/proposals/nhs">NHS</a>
62
+ <span>/</span>
63
+ <span>Main</span>
64
+ </div>
65
+ </div>
66
+ <div class="flex items-center gap-4">
67
+ <a href="/projects" class="text-gray-300 hover:text-blue-400">Projects</a>
68
+ <a href="/papers" class="text-gray-300 hover:text-blue-400">Papers</a>
69
+ <a href="/proposals" class="text-gray-300 hover:text-blue-400">Proposals</a>
70
+ <a href="/docs" class="text-gray-300 hover:text-blue-400">Documentation</a>
71
+ <button onclick="toggleLanguage()" class="bg-blue-500 px-3 py-1 rounded-full text-sm hover:bg-blue-600">
72
+ <span lang="es">EN</span>
73
+ <span lang="en">ES</span>
74
+ </button>
75
+ </div>
76
  </div>
77
  </nav>
78
 
79
  <div class="max-w-4xl mx-auto p-8">
80
+ <div class="flex justify-between items-center mb-8">
81
+ <h1 class="text-4xl font-bold text-blue-400">
82
+ <span lang="es">Propuesta NHS</span>
83
+ <span lang="en">NHS Proposal</span>
84
+ </h1>
85
+ <div class="flex gap-4">
86
+ <a href="/proposals/nhs/detailed" class="text-blue-400 hover:text-blue-300">
87
+ <span lang="es">Ver Detallado</span>
88
+ <span lang="en">View Detailed</span>
89
+ </a>
90
+ <a href="/proposals/nhs/formal" class="text-blue-400 hover:text-blue-300">
91
+ <span lang="es">Ver Formal</span>
92
+ <span lang="en">View Formal</span>
93
+ </a>
94
+ </div>
95
  </div>
96
 
97
  <article class="prose prose-invert max-w-none">
tools/link_checker.html ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Website Link Validator</title>
6
+ <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
7
+ <style>
8
+ :root {
9
+ --success: #10b981;
10
+ --warning: #f59e0b;
11
+ --error: #ef4444;
12
+ --info: #3b82f6;
13
+ }
14
+ body {
15
+ font-family: system-ui, -apple-system, sans-serif;
16
+ max-width: 1200px;
17
+ margin: 0 auto;
18
+ padding: 2rem;
19
+ background: #f8fafc;
20
+ }
21
+ .status-grid {
22
+ display: grid;
23
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
24
+ gap: 1rem;
25
+ margin: 2rem 0;
26
+ }
27
+ .status-card {
28
+ padding: 1.5rem;
29
+ border-radius: 0.5rem;
30
+ background: white;
31
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
32
+ }
33
+ .status-success { border-left: 4px solid var(--success); }
34
+ .status-warning { border-left: 4px solid var(--warning); }
35
+ .status-error { border-left: 4px solid var(--error); }
36
+ .status-info { border-left: 4px solid var(--info); }
37
+ .link-list {
38
+ margin-top: 2rem;
39
+ }
40
+ .link-item {
41
+ padding: 1rem;
42
+ border-radius: 0.5rem;
43
+ margin-bottom: 0.5rem;
44
+ background: #f8fafc;
45
+ }
46
+ .link-status {
47
+ display: inline-block;
48
+ padding: 0.25rem 0.5rem;
49
+ border-radius: 0.25rem;
50
+ font-size: 0.875rem;
51
+ font-weight: 500;
52
+ }
53
+ .status-ok { background: #dcfce7; color: #166534; }
54
+ .status-broken { background: #fee2e2; color: #991b1b; }
55
+ .mermaid {
56
+ margin: 2rem 0;
57
+ padding: 1rem;
58
+ background: white;
59
+ border-radius: 0.5rem;
60
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
61
+ }
62
+ </style>
63
+ </head>
64
+ <body>
65
+ <h1>Website Link Validator</h1>
66
+
67
+ <div class="status-grid">
68
+ <div class="status-card status-info">
69
+ <h3>Total Links</h3>
70
+ <div class="mermaid">
71
+ pie
72
+ title Link Distribution
73
+ "Working" : 85
74
+ "Redirects" : 10
75
+ "Broken" : 5
76
+ </div>
77
+ </div>
78
+ <div class="status-card status-warning">
79
+ <h3>Critical Paths</h3>
80
+ <div class="mermaid">
81
+ graph TD
82
+ A[Home] --> B[Projects]
83
+ B --> C[AutoMedical]
84
+ A --> D[Papers]
85
+ D --> E[Current Research]
86
+ A --> F[Proposals]
87
+ F --> G[NHS]
88
+
89
+ classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px;
90
+ classDef critical fill:#fee2e2,stroke:#991b1b,stroke-width:2px;
91
+ </div>
92
+ </div>
93
+ </div>
94
+
95
+ <div class="link-list">
96
+ <h2>Link Status</h2>
97
+ <div class="link-item">
98
+ <span class="link-status status-ok">βœ“</span>
99
+ <span>/</span> β†’ Home
100
+ </div>
101
+ <div class="link-item">
102
+ <span class="link-status status-ok">βœ“</span>
103
+ <span>/projects</span> β†’ Projects
104
+ </div>
105
+ <div class="link-item">
106
+ <span class="link-status status-ok">βœ“</span>
107
+ <span>/papers</span> β†’ Papers
108
+ </div>
109
+ <div class="link-item">
110
+ <span class="link-status status-ok">βœ“</span>
111
+ <span>/proposals</span> β†’ Proposals
112
+ </div>
113
+ <div class="link-item">
114
+ <span class="link-status status-ok">βœ“</span>
115
+ <span>/docs</span> β†’ Documentation
116
+ </div>
117
+ </div>
118
+
119
+ <script>
120
+ mermaid.initialize({
121
+ startOnLoad: true,
122
+ theme: 'neutral',
123
+ securityLevel: 'loose',
124
+ });
125
+ </script>
126
+ </body>
127
+ </html>
tools/validate.js ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Link Validation Script
2
+ const validateWebsite = {
3
+ // Core paths that must exist
4
+ criticalPaths: [
5
+ '/',
6
+ '/projects',
7
+ '/papers',
8
+ '/proposals',
9
+ '/docs',
10
+ '/api',
11
+ '/investors'
12
+ ],
13
+
14
+ // Project paths
15
+ projectPaths: [
16
+ '/projects/analytics',
17
+ '/projects/autoglaucoma',
18
+ '/projects/automedical'
19
+ ],
20
+
21
+ // Paper paths
22
+ paperPaths: [
23
+ '/papers/fermed-vlm.pdf',
24
+ '/papers/fermed-vlm.html',
25
+ '/papers/archive'
26
+ ],
27
+
28
+ // Proposal paths
29
+ proposalPaths: [
30
+ '/proposals/nhs/main',
31
+ '/proposals/nhs/detailed',
32
+ '/proposals/nhs/formal',
33
+ '/proposals/spanish/12oct',
34
+ '/proposals/spanish/hospital',
35
+ '/proposals/simple'
36
+ ],
37
+
38
+ // Documentation paths
39
+ docPaths: [
40
+ '/docs/main',
41
+ '/docs/internal/emails',
42
+ '/docs/internal/requirements',
43
+ '/docs/internal/context',
44
+ '/docs/references'
45
+ ],
46
+
47
+ // Validate all links
48
+ validateLinks() {
49
+ const results = {
50
+ working: [],
51
+ redirects: [],
52
+ broken: []
53
+ };
54
+
55
+ // Combine all paths
56
+ const allPaths = [
57
+ ...this.criticalPaths,
58
+ ...this.projectPaths,
59
+ ...this.paperPaths,
60
+ ...this.proposalPaths,
61
+ ...this.docPaths
62
+ ];
63
+
64
+ // Check each path
65
+ allPaths.forEach(path => {
66
+ try {
67
+ const response = fetch(path);
68
+ if (response.ok) {
69
+ results.working.push(path);
70
+ } else if (response.status >= 300 && response.status < 400) {
71
+ results.redirects.push(path);
72
+ } else {
73
+ results.broken.push(path);
74
+ }
75
+ } catch (error) {
76
+ results.broken.push(path);
77
+ }
78
+ });
79
+
80
+ return results;
81
+ },
82
+
83
+ // Validate navigation consistency
84
+ validateNavigation() {
85
+ const navResults = {
86
+ consistent: [],
87
+ inconsistent: []
88
+ };
89
+
90
+ // Check navigation elements
91
+ document.querySelectorAll('nav a').forEach(link => {
92
+ const href = link.getAttribute('href');
93
+ if (href) {
94
+ const matchingPath = this.allPaths.find(path => path === href);
95
+ if (matchingPath) {
96
+ navResults.consistent.push(href);
97
+ } else {
98
+ navResults.inconsistent.push(href);
99
+ }
100
+ }
101
+ });
102
+
103
+ return navResults;
104
+ },
105
+
106
+ // Validate breadcrumbs
107
+ validateBreadcrumbs() {
108
+ const breadcrumbResults = {
109
+ valid: [],
110
+ invalid: []
111
+ };
112
+
113
+ document.querySelectorAll('.breadcrumb').forEach(breadcrumb => {
114
+ const links = breadcrumb.querySelectorAll('a');
115
+ let validPath = true;
116
+ let currentPath = '';
117
+
118
+ links.forEach(link => {
119
+ const href = link.getAttribute('href');
120
+ if (href) {
121
+ currentPath += href === '/' ? '' : href;
122
+ if (!this.allPaths.includes(currentPath)) {
123
+ validPath = false;
124
+ }
125
+ }
126
+ });
127
+
128
+ if (validPath) {
129
+ breadcrumbResults.valid.push(currentPath);
130
+ } else {
131
+ breadcrumbResults.invalid.push(currentPath);
132
+ }
133
+ });
134
+
135
+ return breadcrumbResults;
136
+ },
137
+
138
+ // Generate report
139
+ generateReport() {
140
+ const linkResults = this.validateLinks();
141
+ const navResults = this.validateNavigation();
142
+ const breadcrumbResults = this.validateBreadcrumbs();
143
+
144
+ return {
145
+ links: linkResults,
146
+ navigation: navResults,
147
+ breadcrumbs: breadcrumbResults,
148
+ summary: {
149
+ totalLinks: Object.values(linkResults).flat().length,
150
+ brokenLinks: linkResults.broken.length,
151
+ inconsistentNav: navResults.inconsistent.length,
152
+ invalidBreadcrumbs: breadcrumbResults.invalid.length
153
+ }
154
+ };
155
+ }
156
+ };
157
+
158
+ // Export for use in Node.js environments
159
+ if (typeof module !== 'undefined' && module.exports) {
160
+ module.exports = validateWebsite;
161
+ }
website_paths.html ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Website Navigation Paths</title>
5
+ <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
6
+ <style>
7
+ body { padding: 20px; font-family: system-ui; }
8
+ .mermaid { background: white; padding: 20px; border-radius: 8px; }
9
+ </style>
10
+ </head>
11
+ <body>
12
+ <div class="mermaid">
13
+ graph TD
14
+ Home[Homepage /] --> Papers[Papers /papers]
15
+ Home --> Projects[Projects /projects]
16
+ Home --> Proposals[Proposals /proposals]
17
+ Home --> Docs[Documentation /docs]
18
+ Home --> API[API /api]
19
+ Home --> Investors[Investors /investors]
20
+
21
+ Papers --> CurrentPaper1[FERMED Paper /papers/fermed-vlm.pdf]
22
+ Papers --> CurrentPaper2[FERMED HTML /papers/fermed-vlm.html]
23
+ Papers --> Archive[Archive /papers/archive]
24
+
25
+ Archive --> ResearchPapers[Research /papers/archive/research]
26
+ Archive --> Drafts[Drafts /papers/archive/drafts]
27
+ Archive --> OtherDocs[Other /papers/archive/other]
28
+
29
+ Projects --> Analytics[Analytics /projects/analytics]
30
+ Projects --> AutoGlaucoma[AutoGlaucoma /projects/autoglaucoma]
31
+ Projects --> AutoMedical[AutoMedical /projects/automedical]
32
+
33
+ Proposals --> NHS[NHS /proposals/nhs]
34
+ Proposals --> Spanish[Spanish /proposals/spanish]
35
+ Proposals --> Simple[Simple /proposals/simple]
36
+
37
+ NHS --> NHSDetailed[Detailed /proposals/nhs/detailed]
38
+ NHS --> NHSFormal[Formal /proposals/nhs/formal]
39
+ NHS --> NHSProposal[Main /proposals/nhs/main]
40
+
41
+ Spanish --> Oct12[12 Oct /proposals/spanish/12oct]
42
+ Spanish --> SpanishHospital[Hospital /proposals/spanish/hospital]
43
+
44
+ Docs --> DocMain[Main /docs/main]
45
+ Docs --> Internal[Internal /docs/internal]
46
+ Docs --> References[References /docs/references]
47
+
48
+ Internal --> EmailToThem[Emails /docs/internal/emails]
49
+ Internal --> Requirements[Requirements /docs/internal/requirements]
50
+ Internal --> Context[Context /docs/internal/context]
51
+
52
+ classDef page fill:#f9f9f9,stroke:#333,stroke-width:2px;
53
+ classDef current fill:#e3f2fd,stroke:#1565c0,stroke-width:2px;
54
+ classDef section fill:#fff3e0,stroke:#ff9800,stroke-width:2px;
55
+
56
+ class Home,Papers,Projects,Proposals,Docs,API,Investors section;
57
+ class CurrentPaper1,CurrentPaper2 current;
58
+ class Archive,ResearchPapers,Drafts,OtherDocs page;
59
+ </div>
60
+ </body>
61
+ </html>